2010-04-05 3 views
3

Привет У меня есть строка цифр, разделенных запятыми, «100.200.300.400.500», что я Расщепление в массив с помощью яваскрипта разделения функции:номера синтаксического анализа в яваскрипта массиве

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

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

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

var dataSum = ""; 

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

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

ответ

10

(1)

var dataSum = ""; 

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

var dataSum = 0; 

(2)

parseFloat не изменяет входной параметр. Возвращается значение float. Таким образом, вы должны использовать

dataSum += parseFloat(data[i]); 

(3)

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

2-е задание будет перекрывать 1-й. Просто напишите

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

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

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

)

+0

Имеет ли одна строка «dataSum + = parseFloat (данные [i]);» parseFloat отдельные значения данных? Так, например, если я позже буду обращаться к данным [3], я бы хотел, чтобы это было правильно отформатировано с помощью parseFloat. Или мне нужно добавить еще одну строку в цикл? – Choy

+0

+1 для примера ECMAScript 5, мне нравится, как некоторые люди начинают вкладывать их в свои ответы сейчас :-) –

+0

@George: Если вы хотите, чтобы 'data [3]' как поплавок позже, вам нужно использовать 'parseFloat (data [3])' (или более простые '+ данные [3]', почти такой же эффект). – kennytm

2

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

От wcschools:

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

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

var dataSum = 0.0; 

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

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; 
}