我有一个数组,其中包含许多具有匹配键的对象:
[{a: 2, b: 5, c: 6}, {a:3, b: 4, d:1},{a: 1, d: 2}]
我想循环遍历数组,如果键匹配,我想将每个键的结果相加,并返回一个包含每个键之和的对象。
i.e.
{a: 6, b: 9, c: 6, d: 3}
我目前拥有的代码是
function combine() {
var answer = [];
for(var i in arguments){
answer.push(arguments[i])
}
answer.reduce(function(o) {
for (var p in o)
answer[p] = (p in answer ? answer[p] : 0) + o[p];
return answer;
}, {});
}
我能找到答案here如果我要使用下划线库,但是我希望不使用库来完成它。我想我很难理解reduce
方法有效 -https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
任何有关如何解决此问题的帮助将不胜感激。另外,我觉得这个答案应该在 SO 上的某个地方,而不必使用库。
提前致谢。
使用 Array.reduce() 和 Array.map()
var tab = [{a: 2, b: 5, c: 6}, {a:3, b: 4, d:1},{a: 1, d: 2}];
function sum(tab) {
return tab.reduce((a, b) => {
Object.keys(b).map(c => a[c] = (a[c] || 0) + b[c]);
return a;
});
}
console.log(sum(tab));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)