我有多个javascript对象
{ a:12,
b:8,
c:17
}
Run Code Online (Sandbox Code Playgroud)
和
{ a:2,
b:4,
c:1
}
Run Code Online (Sandbox Code Playgroud)
我需要通过键对这两个对象求和
结果:
{ a:14,
b:12,
c:18
}
Run Code Online (Sandbox Code Playgroud)
你有任何javascript解决方案吗?我使用Object.keys.map但它太长了,因为我在我的对象中有100个元素
谢谢你的帮助
chr*_*con 17
你可以使用reduce,下面的函数可以获取你想要的任意数量的对象,并按键对它们求和:
var obj1 = {
a: 12,
b: 8,
c: 17
};
var obj2 = {
a: 12,
b: 8,
c: 17
};
var obj3 = {
a: 12,
b: 8,
c: 17
};
function sumObjectsByKey(...objs) {
return objs.reduce((a, b) => {
for (let k in b) {
if (b.hasOwnProperty(k))
a[k] = (a[k] || 0) + b[k];
}
return a;
}, {});
}
console.log(sumObjectsByKey(obj1, obj2, obj3));Run Code Online (Sandbox Code Playgroud)
小智 8
更深一点,只要对象相同,你想要的就是它!
const arr = [{
a: 12,
b: { a: 12, c: { a: 12 } },
c: 17
},
{
a: 12,
b: { a: 12, c: { a: 12 } },
c: 17
},
{
a: 12,
b: { a: 12, c: { a: 12 } },
c: 17
}
];
const deepMergeSum = (obj1, obj2) => {
return Object.keys(obj1).reduce((acc, key) => {
if (typeof obj2[key] === 'object') {
acc[key] = deepMergeSum(obj1[key], obj2[key]);
} else if (obj2.hasOwnProperty(key) && !isNaN(parseFloat(obj2[key]))) {
acc[key] = obj1[key] + obj2[key]
}
return acc;
}, {});
};
const result = arr.reduce((acc, obj) => acc = deepMergeSum(acc, obj));
console.log('result: ', result);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6260 次 |
| 最近记录: |