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