Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   сложение значений в массиве - NaN (https://javascript.ru/forum/misc/37942-slozhenie-znachenijj-v-massive-nan.html)

Paulyyy 14.05.2013 23:40

сложение значений в массиве - NaN
 
работаю над csv файлом. колонка state отвечает за штат, а balance за баланс типа "122.11") мне надо вывести общий баланс по каждому штату, и при повторе штатов баланс увеличивается. Если таким образом исполнять функцию, то штаты в консоле показываются, а вместо значений баланса выдает NaN- возможно у кого-то будут идеи как решить это?
заранее спасибо! :)
function stateBalance(array) {
var states = new Array();

for (var i = 1; i < array.length; i++) {

var state = array[i][5];


var balance = array[i][12]
.slice(1, -1);

if (typeof array[i][5] == 'undefined') states[state] = 0;

states[state] += parseFloat(balance);


}
return states

}

ksa 15.05.2013 13:15

Цитата:

Сообщение от Paulyyy
как решить это?

Проверить таки тыпы тех операндов. Потому как NaN

Цитата:

NaN

Не-Числовое значение
Описание, примеры

Изначальное значение NaN - такое же, как Number.NaN.

Как правило, оно используется для обозначения ошибки при математических операциях. Вместо генерации исключения, функция возвращает NaN.
http://javascript.ru/NaN

Paulyyy 15.05.2013 16:56

NaN выдает потому что андефайнд прокрался после этого вычисления states[state] += parseFloat(balance); по этому я прописала if (typeof array[i][5] == 'undefined') states[state] = 0;

почему не суммируется..

Paulyyy 15.05.2013 16:59

когда в консоле вывожу typeof balance то пишет string. но используется ведь parseFloat к нему же

nerv_ 15.05.2013 17:14

Цитата:

Сообщение от Paulyyy
возможно у кого-то будут идеи как решить это?

отфильтровать массив

ksa 16.05.2013 15:39

Цитата:

Сообщение от Paulyyy
когда в консоле вывожу typeof balance то пишет string. но используется ведь parseFloat к нему же

Посмотри чему он равен до того и после того... Чему таки равен
states[state]

Т.е. дело точно в операндах.

megaupload 16.05.2013 16:34

лол а при получени операндов нельзя проверить из на нан? или ты считаешь что чем больше строчек кода и действий тем программа тупит и экономишь)? (бывало и такоебыдло)

Paulyyy 16.05.2013 16:42

Цитата:

Сообщение от ksa (Сообщение 250854)
Посмотри чему он равен до того и после того... Чему таки равен
states[state]

Т.е. дело точно в операндах.

дело в них.
что убрать строку с if что оставить то states[state] = number, balance и state = string... ну а если до сложения то меняется только states[state] на undefined.

Находила много вариантов как бы balance( числа типа '122.22' ) перевести в число чтобы просуммировать, ничего правильно не получилось.

Paulyyy 16.05.2013 17:00

Цитата:

Сообщение от megaupload (Сообщение 250868)
лол а при получени операндов нельзя проверить из на нан? или ты считаешь что чем больше строчек кода и действий тем программа тупит и экономишь)? (бывало и такоебыдло)

Не стараюсь экономить. Недавно изучаю js, по этому экономия у меня не в приоритете)

ksa 17.05.2013 09:04

Цитата:

Сообщение от Paulyyy
ничего правильно не получилось.

Нужно начать с простого...
1. Понять на каких именно данных получается НаН
2. На простом примере научиться переводить разнотипные операнды к нужному типу
3. Применить полученые навыки

NeoN 17.05.2013 16:20

интересно взглянуть на массив array, который передается функции


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