2015-05-22 3 views
-1

У меня возникла проблема с назначением значений массиву, и когда я позже получаю доступ к этому слоту массива, он возвращает NaN.Возврат массива NaN

Во-первых, я объявляю массивы, как:

var oldTherms = []; 
    var newTherms = []; 
    var oldInputTherms; 
    var newInputTherms; 

Я использую набор данных переменных для вычисления значения, назначаемую к oldTherms и newTherms массивов. Я проверил, что часть расчета работает и поставляет соответствующее значение в oldInputTherms и newInputTherms. Я также подтвердил, что dataSet.month [i] возвращает правильные значения. Однако приведенная ниже инструкция переключения не добавляет кумулятивного итога к oldTherms [] или newTherms []. Когда я пытаюсь получить доступ к newTherms [] или oldTherms [], то результат будет 'NaN'

switch (dataSet.month[i]){ 
    //subtract 1 in array slot bc months number 1-12 and array slots number 0-11 
    case 1: //january 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 2: //february 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 3: //march 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 4: //april 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 5: //may 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 6: //june 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 7: //july 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 8: //august 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 9: //sept 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 10: //oct 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 11: //nov 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    case 12: //dec 
     oldTherms[dataSet.month[i]-1] += oldInputTherms; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += newInputTherms; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
     break; 
    default: 
     oldTherms[dataSet.month[i]-1] += 0; //add therms to the total used 
     newTherms[dataSet.month[i]-1] += 0; 
     oldKwh[dataSet.month[i]-1] += 0; //no cooling energy calcs 
     newKwh[dataSet.month[i]-1] += 0; 
} 
+3

Зачем вам нужны все те случаи, которые делают то же самое? – Barmar

+1

'oldInputTherms',' newInputTherms' объявлены, но не определены – Drakes

+0

В чем смысл добавления '0' ко всему в случае' default: '? – Barmar

ответ

2

Вы должны инициализировать массивы содержат 0:

var oldTherms = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 
var newTherms = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 

В противном случае, вы добавляете newInputTherms и oldInputTherms к undefined, и результатом этого является NaN.

+0

Ах, браво. Хорошее место. – Drakes

+0

Не мог бы это сделать без вашего указания в правильном направлении. – Barmar

+0

Отлично! Спасибо огромное! Извините за любую путаницу, и я ценю ваше терпение. Я только пару раз играю с JavaScript в течение нескольких недель, и мне так нужно учиться! – coolhand

3

Когда я пытаюсь получить доступ к newTherms [] или oldTherms [], то результат будет 'NaN'

oldInputTherms, newInputTherms объявлены, но не определены, так как эти линии

oldTherms[dataSet.month[i]-1] += oldInputTherms; 
newTherms[dataSet.month[i]-1] += newInputTherms; 

приведет к тому, NaN.


Но вы сказали,

Я проверил, что блок вычисления работает и подает соответствующее значение в oldInputTherms и newInputTherms

Если это так, то, возможно, и oldThermsnewTherms не инициализированы правильно. Если это так, см. Ответ Бармара выше.

+0

Извините за некоторые путаницы. Я назначаю значения oldInputTherms и newInputTherms ранее в коде. Я проверил, что в коммутаторе они все еще сохраняют правильные значения. Мне нужны все аргументы case, потому что я отделяю их от использования энергии за каждый месяц, поэтому я использую 12-сегментный массив для хранения значения для каждого месяца. – coolhand

+0

Это просто добавляет 0 ко всему, что бесполезно. Похоже, что в коде есть что-то, что должно было заставить эти переменные к чему-то релевантному. – Barmar

+0

«бесполезный» - относительный термин. Существует промежуточный код, который мы не видим. Если NaN уйдет, значит, мы на правильном пути. – Drakes

Смежные вопросы