ググっても情報がなかったのでメモしておきます。
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の行でこれらすべて行っています)
おわり
コメント