Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Непонятно откуда появляется значение NaN при подсчете суммы (https://javascript.ru/forum/events/75130-neponyatno-otkuda-poyavlyaetsya-znachenie-nan-pri-podschete-summy.html)

kuchuluk 05.09.2018 08:06

Непонятно откуда появляется значение NaN при подсчете суммы
 
Здравствуйте. Есть таблица, пытаюсь подсчитывать в каждой строке сумму разниц всех чисел в каждой ячейке. То есть в каждой ячейке есть значение 9/18 или "В", то есть выходной. Соответственно если значение 9/18, то высчитываю разницу и складываю все разницы в каждой строке, если "В", то ничего с этой ячейкой не делаю.
<td class="width20px aligner" id="1-8-2018">9/18</td><td class="width20px aligner" id="2-8-2018">9/18</td><td class="width20px aligner" id="3-8-2018">9/18</td><td class="graph-table-holiday width20px aligner" id="4-8-2018">В</td><td class="graph-table-holiday width20px aligner" id="5-8-2018">В</td><td class="width20px aligner" id="6-8-2018">9/18</td><td class="width20px aligner" id="7-8-2018">9/18</td><td class="width20px aligner" id="8-8-2018">9/18</td><td class="width20px aligner" id="9-8-2018">9/18</td><td class="width20px aligner" id="10-8-2018">9/18</td><td class="graph-table-holiday width20px aligner" id="11-8-2018">В</td><td class="graph-table-holiday width20px aligner" id="12-8-2018">В</td><td class="width20px aligner" id="13-8-2018">9/18</td><td class="width20px aligner" id="14-8-2018">9/18</td><td class="width20px aligner" id="15-8-2018">9/18</td><td class="width20px aligner" id="16-8-2018">9/18</td><td class="width20px aligner" id="17-8-2018">9/18</td><td class="graph-table-holiday width20px aligner" id="18-8-2018">В</td><td class="graph-table-holiday width20px aligner" id="19-8-2018">В</td><td class="width20px aligner" id="20-8-2018">9/18</td><td class="graph-table-holiday width20px aligner" id="21-8-2018">В</td><td class="width20px aligner" id="22-8-2018">9/18</td><td class="width20px aligner" id="23-8-2018">9/18</td><td class="width20px aligner" id="24-8-2018">9/18</td><td class="graph-table-weekday width20px aligner" id="25-8-2018">12/21</td><td class="graph-table-holiday width20px aligner" id="26-8-2018">В</td><td class="width20px aligner" id="27-8-2018">9/18</td><td class="width20px aligner" id="28-8-2018">9/18</td><td class="width20px aligner" id="29-8-2018">9/18</td><td class="graph-table-holiday width20px aligner" id="30-8-2018">В</td><td class="graph-table-holiday width20px aligner" id="31-8-2018">В</td><td class="aligner">168</td><td>168</td></tr>

// получаю строку если у нее есть ID
if (TRId != null) {
  // объявляю переменную в которой будет
  // сумма всех разниц ячеек данной строки
  difference2 = 0;
  
  // для каждой ячейки в цикле произвожу действия
  elem.querySelectorAll('td').forEach(function(elem) {
    var TDId = elem.getAttribute('id');
    if (TDId != null) {
      var currentTDVal = elem.innerHTML;
      currentTDVal = currentTDVal.substring(0,5);
      if (currentTDVal.indexOf('/') > 0) {
        var hours = currentTDVal.split('/');
	var difference = hours[1] - hours[0] - 1;
      }
      difference2 = difference2 + difference;
    }
  }
}


Так вот в difference2 всегда значение NaN. Проверил каждую ячейку строки alert-ом, и действительно в конце каждой строки откуда-то появляется значение NaN. Хотя по логике вещей уже после проверки if (currentTDVal.indexOf('/') > 0) не должно ничего попадать, кроме значений 9/18. Не могу понять, откуда берется этот NaN?

Белый шум 05.09.2018 08:25

Цитата:

Сообщение от kuchuluk
Хотя по логике вещей уже после проверки if

Строка difference2 = difference2 + difference; находится снаружи этого if, т.е. выпоняется всегда. А вот difference присваивается только внутри этого if.

Получается, что вы складываете число и undefined ( = NaN ).
И в последующем - NaN + число = NaN

kuchuluk 05.09.2018 09:14

Цитата:

Сообщение от Белый шум
И в последующем - NaN + число = NaN

Спасибо вам огромное! Очень помогли


Часовой пояс GMT +3, время: 12:13.