ググっても情報がなかったのでメモしておきます。
1.異なるキーがないとき
例えば、以下のような同じキーを持つ2つのオブジェクトを足し算&マージして
const a = { 1: 100, 2: 200, 3: 300, }; const b = { 1: 10, 2: 20, 3: 30, };
以下のようなオブジェクトを作りたい場合、
{ 1: 110, 2: 220, 3: 330, };
以下のように書けば実現できます。
const a = { 1: 100, 2: 200, 3: 300, }; const b = { 1: 10, 2: 20, 3: 30, }; const c = Object.keys(a).reduce((acc, value) => { acc[value] = a[value] + b[value]; return acc; }, {}); console.log(c);
2.異なるキーがあるとき
例えば、以下のような異なるキーを持つ2つのオブジェクトを足し算&マージして
const a = { 1: 100, 3: 300, 4: 400, }; const b = { 1: 10, 3: 30, 5: 50, };
以下のようなオブジェクトを作りたい場合、
{ 1: 110, 2: 220, 3: 330, 4: 400, 5: 50, };
以下のように書けば実現できます。
const a = { 1: 100, 3: 300, 4: 400, }; const b = { 1: 10, 3: 30, 5: 50, }; const ab = [...new Set(Object.keys(a).concat(Object.keys(b)))]; //[1, 3, 4, 5] const c = ab.reduce((acc, value) => { const x = a[value] === undefined ? 0 : a[value]; const y = b[value] === undefined ? 0 : b[value]; acc[value] = x + y; return acc; }, {}); console.log(c);
Object.keys
メソッドでa,bのキーだけを取り出すconcat
メソッドで1.で作った配列を結合する(ab)- 作った配列abをnew Setして重複を取り除く
- スプレッド構文(…)でSetを配列に戻す
という風にするのがポイント。(const abの行でこれらすべて行っています)
おわり
コメント