2014-02-06 5 views
0

У меня есть динамический массив JavaScript, который создается на моей странице (ни одно из этих чисел никогда не будет то же самое, много вариантов), например:Подведение итогов в JavaScript массив

myArray[ 1 ] = [295518, 2]; 
myArray[ 2 ] = [123518, 123]; 
myArray[ 3 ] = [295518, 43]; 
myArray[ 4 ] = [295518, 65]; 
myArray[ 5 ] = [234518, 3]; 
myArray[ 6 ] = [567518, 56]; 

Объяснение этого массива :

   [id number, quantity] 
myArray[ 1 ] = [295518, 2]; 

Мне нужно объединить все элементы массива id вместе и суммировать их значения.

For instance: 295518 would add 2 + 43 + 65 = 110 

Тогда мне это нужно обновить идентификатор на странице со значением:

$("#295518").text(110); 

Так что я имею в виду это, но я не знаю, как написать это в JavaScript:

[start JavaScript loop] 
     [grab distinct ids] 
      [start id loop] 
       [grab all values based on id] 
       [sum their qty values] 
       [set the id element on the page with the sum value] 
        [example: $("#295518").text(110); ] 
      [end id loop] 
[/end JavaScript loop] 
+0

Почему мне нужно использовать правильную терминологию, если вы уже знаете, что я имею в виду LOL. – LargeTuna

+0

@ LargeTuna Итак, вы, по крайней мере, звучите, как будто знаете, о чем говорите. Это более важно, чем вы думаете. –

+0

Это ясно для некоторых людей: rolleyes: – Archer

ответ

2

Это должно сделать трюк ...

var myArray = []; 
myArray.push([295518, 2]); 
myArray.push([123518, 123]); 
myArray.push([295518, 43]); 
myArray.push([295518, 65]); 
myArray.push([234518, 3]); 
myArray.push([567518, 56]); 

var result = {}; 

$(myArray).each(function() { 
    var key = this[0]; 
    var value = this[1]; 
    if (result[key]) { 
     result[key] += value; 
    } else { 
     result[key] = value; 
    } 
}); 

console.log(result); 

Here's a working example...

И просто для полноты картины, вот то же самое без JQuery (в случае, если вы когда-нибудь это нужно без) ...

var myArray = []; 
myArray.push([295518, 2]); 
myArray.push([123518, 123]); 
myArray.push([295518, 43]); 
myArray.push([295518, 65]); 
myArray.push([234518, 3]); 
myArray.push([567518, 56]); 

var result = {}; 

for (i in myArray) { 
    var key = myArray[i][0]; 
    var value = myArray[i][1]; 
    if (result[key]) { 
     result[key] += value; 
    } else { 
     result[key] = value; 
    } 
} 

console.log(result); 
+0

Отлично работает, большое спасибо за вашу помощь! – LargeTuna

+0

Нет проблем - с удовольствием помогите :) – Archer

0

Предполагая myArray всегда содержит массивы с length 2, вам могли бы сделать следующее:

var myArray = [ 
    [295518, 2], 
    [123518, 123], 
    [295518, 43], 
    [295518, 65], 
    [234518, 3], 
    [567518, 56] 
]; 
var allSums = {}; 

$.each(myArray, function(i, pair) { 
    if(allSums[pair[0]]) { 
     allSums[pair[0]] += pair[1]; 
    } 
    else { 
     allSums[pair[0]] = pair[1]; 
    } 
}); 

DEMO

Смежные вопросы