2015-07-19 6 views
0

У меня есть массив с 25 слотами, и каждый слот заполняется щелчком соответствующей кнопки. У меня проблема с суммированием значений массива. Я пробовалПодведение итогов в массиве - Javascript

for(var k = 0; k < price.length; k++) 
{ 
    totalPrice += price[k] << 0; 
} 

Но это просто добавляет цену в конец предыдущего вывода вместо того, чтобы складывать вместе.

Мой текущий код заключается в следующем:

$("#sumArray").click(function() 
{  
    a++; 
    price[0] = 8.45 * a; 
    alert(price[0]); 
    for(var k = 0; k < price.length; k++) 
    { 
     totalPrice += price[k] << 0; 
    } 
    alert(totalPrice); 
    for(var i = 0; i < 27; i++) 
    { 
     $("#priceHere"+i+"").append("<b>"+totalPrice+"</b>"); 
    } 
    //$.mobile.changePage("#mainMenu1"); 
}); 

Все остальные индексы массива заполняются в других функций щелчков.

EDIT: Удален весь код, не относящийся к вопросу, для удобства чтения. индексы ценового массива могут меняться в зависимости от того, сколько раз нажимается определенная кнопка.

+0

Я полагаю, ваши обращаясь к текстовому массиву и закомментирован переменная totalPrice? – John

+0

Возможно, вы можете преобразовать эти текстовые значения в то, что может быть добавлено численно? иначе вы получите только конкатенацию. – ydobonebi

+0

@QuinnRoundy текстовый массив не мой вопрос atm. Это ценовой массив – John

ответ

0

По вашему вопросу, вы больше ничего не нужно, чем это

price = [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5] 
totalPrice = 0 
for(var k = 0; k < price.length; k++) {totalPrice += price[k];} 
// gives 105 

Но это только кажется, добавить цену на конец предыдущего выход вместо сложения.

Сделать это ноль:

totalPrice = 0 
+0

Значения массива не заданы, они меняются каждый раз, когда нажимается кнопка. Я также пробовал этот путь, кажется, что он принимает значения от первого щелчка и значения от второго щелчка (даже если они находятся в одном и том же индексе) и складывает их вместе. Они также просто присоединяются друг к другу по ценеHere – John

+0

Задайте это должным образом в вопросе, что значения массива могут меняться – sinhayash

+0

Я бы подумал, глядя на цену [0] = 8.45 * a; вы можете увидеть, что он имеет возможность изменить – John

0

Где вы объявляете price и totalPrice?

Вот пример суммирования значений массива:

var price = [1, 2, 3, 4, 5], // example array of prices 
    totalPrice = 0, // initialize to 0 so totalPrice is a number 
    k; // counter that you'll use in the loop 

for (k = 0; k < price.length; k++) { 
    totalPrice += price[k]; 
} 

console.log(totalPrice); // 15 

Обратите внимание, что JavaScript использует оператор + как для сложения и конкатенации строк. Похоже, что, вероятно, происходит то, что totalPrice был установлен как строка (или type coerced в один), и поэтому, когда вы хотите добавить число, вы на самом деле соединяете строку.

Вот пример того, как это выглядит. Обратите внимание, что весь код идентичен, за исключением присвоения строки (а не число) в totalPrice:

var price = [1, 2, 3, 4, 5], // example array of prices 
    totalPrice = '0', // initialized as the string '0' 
    k; // counter that you'll use in the loop 

for (k = 0; k < price.length; k++) { 
    totalPrice += price[k]; 
} 

console.log(totalPrice); // '' 
+0

Они объявлены глобально – John

2

Для современных browsesrs (IE 9+ и что-нибудь еще)

total = price.reduce(function (prev,curr) { 
    return prev + curr; 
}, 0); 

ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

+0

Я должен отметить, что я делаю это для мобильного приложения, поэтому браузер Совместимость - это не то, о чем мне нужно беспокоиться. – John

+0

Отлично. '.reduce()' выполняется точно для таких вещей, как суммирование массива. – jfriend00

1

Добавьте это до вашего расчета:

totalPrice = 0; 

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

Поскольку вопрос продолжает редактируется:

$("#priceHere"+i+"").append("<b>"+totalPrice+"</b>"); 

ли, что он говорит. Он добавляет общую стоимость элемента. Если вы хотите полностью перезаписать значение, вы можете сделать:

$("#priceHere"+i+"").html("<b>"+totalPrice+"</b>"); 
+0

Прочтите вопрос ... lol – cswl

+2

Да, "lol". Я прочитал вопрос. Хотя я мог бы обновить свой ответ, так как ОП редактировал его вопрос несколько раз. –

+0

Извините, это вышло неправильно. Я имел в виду, что «+1 читал (издевался) на вопрос ...», как в «read as» .... но SO did not позволял мне вводить +1 .. и у англичан есть тот же глагол читать читать читать,,. – cswl