Javascript 在对象数组中添加匹配键的值
我有一个数组,其中包含许多具有匹配键的对象:Javascript 在对象数组中添加匹配键的值,javascript,arrays,object,Javascript,Arrays,Object,我有一个数组,其中包含许多具有匹配键的对象: [{a: 2, b: 5, c: 6}, {a:3, b: 4, d:1},{a: 1, d: 2}] 我想在数组中循环,如果键匹配,我想添加每个键的结果,并返回一个包含每个键总和的对象 i、 e 我目前拥有的代码是 function combine() { var answer = []; for(var i in arguments){ answer.push(arguments[i]) } answer.reduce
[{a: 2, b: 5, c: 6}, {a:3, b: 4, d:1},{a: 1, d: 2}]
我想在数组中循环,如果键匹配,我想添加每个键的结果,并返回一个包含每个键总和的对象
i、 e
我目前拥有的代码是
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;
}, {});
}
如果使用下划线库,我可以找到答案,但是我希望不使用库。我想我很难理解reduce
方法是如何工作的-
对于如何解决这一问题,我们将不胜感激。另外,我觉得这是一个答案,应该在某处,所以不必使用图书馆
提前感谢。循环浏览每个对象并添加它
vara=[{a:2,b:5,c:6},{a:3,b:4,d:1},{a:1,d:2}];
var ans={};
对于(变量i=0;i试试这个
resobj={};
[{a:2,b:5,c:6},{a:3,b:4,d:1},{a:1,d:2}].forEach(函数(v){
var keys=Object.keys(v);
对于(i=0;i
中的回调函数需要两个参数:
返回的上一个值的结果(如果是第一个值,则返回初始值)
循环中的当前值
您还应该传递一个空对象作为第二个参数来减少。这是你要填写的
var输入=[
{a:2,b:5,c:6},
{a:3,b:4,d:1},
{a:1,d:2}
];
var应答=输入。减少(功能(上一个,当前){
用于(以货币表示的var p){
上一个[p]=(上一个[p]| | 0)+当前[p];
}
return prev;//这将在下一次迭代中作为prev传递或作为结果返回。
}, {}); // {}是作为prev传递的初始值
控制台日志(应答)代码>使用reduce的另一个解决方案:
var result=[{a:2,b:5,c:6},{a:3,b:4,d:1},{a:1,d:2}].reduce(函数(上一个,当前){
Object.keys(当前).forEach(函数(键){
上一[键]=(上一[键]| | 0)+当前[键];
});
返回上一个;
}, {});
document.write(“”+JSON.stringify(结果,0,2)+“”)代码>只需使用和一个对象即可获得结果
var data=[{a:2,b:5,c:6},{a:3,b:4,d:1},{a:1,d:2}],
obj={};
data.forEach(函数(o){
Object.keys(o).forEach(函数(k){
obj[k]=(obj[k]| | 0)+o[k];
});
})
document.write(''+JSON.stringify(obj,0,4)+'')使用Array.reduce()和Array.map()进行编码
还要提到您得到的rn输出。谢谢,这很有效。然而,我对这一行有点困惑ans[obj]=ans[obj]?ans[obj]+a[i][obj]:a[i][obj]代码>。你能在回答中解释一下吗?
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;
}, {});
}
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));