В JavaScript есть элегантный способ объединить два объекта и суммировать какие-либо общие свойства?

В JavaScript есть элегантный способ объединить два объекта и суммировать какие-либо общие свойства?

На самом деле в Vanilla JS нет никаких ярлыков, вы должны явно перебирать каждый объект и каждое свойство и каким-то образом суммировать их. Один из вариантов — сгруппировать с помощью reduce :

 const arr = [{ foo: 1, bar: 2 }, { bar: 5, baz: 7 }, { baz: 10, buzz: 10 }]; const combined = arr.reduce((a, obj) ={amp}gt; Object.entries(obj).reduce((a, [key, val]) ={amp}gt; { 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); 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector