返回javascript数组中重复元素的总和

时间:2015-03-16 14:00:38

标签: javascript arrays sorting

我已经查看了论坛,看看我是否能回答这个问题,但到目前为止,我还没有。我有这个二维数组,如果它们是相同的,我想总结它们的值。这是一个例子。

 CAR      CAH     394
 CAR      CAH     96
 CAR      CAP     268
 DOR      CAF     71
 DOR      CAP     96
 DOR      CAP     268
 VAC      GILAB   71

排序数组后,我有上述值。如何在arraylist中添加所有重复项。在这种情况下,它会影响CAR | CAH和DOR | CAP。因此,不是返回重复项,而是使用合并的总和返回一个副本。

1 个答案:

答案 0 :(得分:2)

如果我正在理解你正确的问题(因为它确实不是很清楚),并且鉴于你的数组已经排序,那么我可以通过使用实现你想要的Array.reduce

var source = [
    ["CAR", "CAH", 394],
    ["CAR", "CAH", 96],
    ["CAR", "CAP", 268],
    ["DOR", "CAF", 71],
    ["DOR", "CAP", 96],
    ["DOR", "CAP", 268],
    ["VAC", "GILAB", 71]
];

var last;
var folded = source.reduce(function(prev,curr){
    if (last) {
        if (last[0] === curr[0] && last[1] === curr[1]) {
            last[2] += curr[2];
            return prev;
        }
    }
    last = curr;
    prev.push(curr);
    return prev;
},[]);

alert(JSON.stringify(folded));

您基本上是通过将当前值与最后一个值进行比较来构建新数组。如果前两个元素匹配,则将最后一个元素添加到上一个值并返回该数组。如果它们不匹配,则将新值推送到数组上。