парсинг чисел в массиве javascript - PullRequest
3 голосов
/ 05 апреля 2010

Привет У меня есть строка чисел, разделенных запятыми, "100,200,300,400,500", которые я разделяю на массив с помощью функции разбиения javascript:

var data = [];
data = dataString.split(",");

Я пытаюсь проанализировать значения массива с помощью parseFloat и затем сохранить их обратно в массив. Затем я хотел бы сложить числа в массиве и сохранить его как другую переменную "dataSum".

У меня есть следующий код, но я не могу заставить его работать:

var dataSum = "";

for (var i=0; i < data.length; i++) {
    parseFloat(data[i]);
    dataSum += data[i];
}

Таким образом, в конце всего этого я смогу получить доступ к любому из проанализированных чисел по отдельности: data [0], data [1] и т. Д ... и иметь общее число для dataSum. Что я делаю не так?

Ответы [ 3 ]

10 голосов
/ 05 апреля 2010

(1)

var dataSum = "";

Вы инициализируете dataSum как строку. Для строк += является оператором конкатенации, поэтому вы получите 100200300400500 из-за конкатенации. Вы должны инициализировать его 0:

var dataSum = 0;

(2) * * +1011

parseFloat не изменяет входной параметр. Значение с плавающей точкой возвращается. Поэтому вы должны использовать

dataSum += parseFloat(data[i]);

(3)

var data = [];
data = dataString.split(",");

2-е назначение отменяет 1-е. Просто напишите

var data = dataString.split(",");

(Кстати, ECMAScript 5 поддерживает эту однострочную строку:

return "100,200,300,400,500".split(/,/).map(parseFloat).reduce(function(x,y){return x+y;})

)

6 голосов
/ 05 апреля 2010

parseFloat возвращает значение, которое вы должны использовать для расчета, а также вы должны инициализировать переменную dataSum числовым значением.

var dataSum = 0;

for (var i=0; i < data.length; i++) {
    var current = parseFloat(data[i]);
    dataSum += current;
    // to save back onto array
    // data[i] = current;
}
2 голосов
/ 05 апреля 2010

Вы используете parseFloat, но не назначаете результат чему-либо.

Из школ :

Функция parseFloat () анализирует строку и возвращает число с плавающей запятой.

Кроме того, добавление числа к строке приведет к объединению результатов, поэтому по умолчанию вы должны указать dataSum, а не "".

var dataSum = 0.0;

for (var i=0; i < data.length; i++) {
    dataSum += parseFloat(data[i]);
}
...