Javascript数组重复和值

时间:2017-01-26 12:30:04

标签: javascript

这是我的第一个Stack Overlow问题:

我得到了这个数组[['a',12],['a',21],['b',1],['c',4],['c',5]]

我希望像[['a',33],['b',1],['c',9]]

一样输出它

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以使用哈希表来引用具有相同内部数组第一项的相同结果数组。

Array#forEach循环数组并查看字符串是否已在哈希表中。如果没有,则分配内部数组的副本并将其推送到结果,然后退出回调。

如果找到,请将内部数组的值添加到哈希表的数组中。



var data = [['a', 12], ['a', 21], ['b', 1], ['c', 4], ['c', 5]],
    hash = Object.create(null), // generate object without prototypes
    result = [];

data.forEach(function (a) {
    if (!(a[0] in hash)) {
        hash[a[0]] = a.slice();
        result.push(hash[a[0]]);
        return;
    }
    hash[a[0]][1] += a[1];
});

console.log(result);
console.log(hash); // to show how it works

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:0)

使用Array.reduce

var data = [['a', 12], ['a', 21], ['b', 1], ['c', 4], ['c', 5]];

var result = data.reduce(function (a, b, i) {
    const c = a.filter(function (ax) { return ax[0] === b[0] });
    c.length > 0 ? c[0][1] = c[0][1] + b[1] : a.push(b);
    return a;
}, []);

console.log(result);
// [[a, 33], [b, 1], [c, 9]]