В vanilla JS на самом деле нет никаких ярлыков, вы должны явно перебирать каждый объект и каждое свойство и каким-то образом суммировать их. Одним из вариантов является группировка с reduce
:
const arr = [{
foo: 1,
bar: 2
}, {
bar: 5,
baz: 7
}, {
baz: 10,
buzz: 10
}];
const combined = arr.reduce((a, obj) =>
Object.entries(obj).reduce((a, [key, val]) => {
a[key] = (a[key] || 0) + val;
return a;
}, a)
, {});
console.log(combined);
Я предпочитаю reduce
, потому что созданная внешняя переменная combined
не мутирует в своей области видимости, но вы можете использовать for..of
вместо этого, если хотите:
const arr = [{
foo: 1,
bar: 2
}, {
bar: 5,
baz: 7
}, {
baz: 10,
buzz: 10
}];
const combined = {};
for (const obj of arr) {
for (const [key, val] of Object.entries(obj)) {
combined[key] = (combined[key] || 0) + val;
}
}
console.log(combined);