这是我的第一个Stack Overlow问题:
我得到了这个数组[['a',12],['a',21],['b',1],['c',4],['c',5]]
我希望像[['a',33],['b',1],['c',9]]
任何人都可以帮助我吗?
答案 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]]