2014-02-06 104 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 

然後,我需要它來更新值的頁面上的ID:

$("#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

爲什麼我需要使用正確的術語,如果你已經知道我的意思是哈哈。 – 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總是包含的2 length陣列,你可以做到以下幾點:

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