【JavaScript】2つのオブジェクトを1つにマージし、同じキーの値を合計する方法
本記事では、2つのオブジェクトを引数として受け取り、それらを1つのオブジェクトにマージしながら、同じキーを持つ値を合計する関数をJavaScriptで作成します。
この処理には「線形時間(O(n))・定数空間(O(1))」という制約があります。つまり、ループは最大1回までしか使用できず、既存のオブジェクトのプロパティをそのまま更新してマージする必要があります。新しい変数やオブジェクトは作成しません。
実装例
それでは、この関数のコードを見ていきましょう。
const obj1 = {
value1: 45,
value2: 33,
value3: 41,
value4: 4,
value5: 65,
value6: 5,
value7: 15,
};
const obj2 = {
value1: 34,
value3: 71,
value5: 17,
value7: 1,
value9: 9,
value11: 11,
};
const mergeObjects = (obj1, obj2) => {
for(key in obj1){
if(obj2[key]){
obj1[key] += obj2[key];
};
};
return;
};
mergeObjects(obj1, obj2);
console.log(obj1);出力結果
コンソールには以下のように出力されます。
{
value1: 79,
value2: 33,
value3: 112,
value4: 4,
value5: 82,
value6: 5,
value7: 16
}コードの解説
この関数では、for...inループを使ってobj1の各キーを走査しています。obj2に同じキーが存在する場合は、その値をobj1の対応する値に加算します。
obj1自体を直接書き換えることで、新しいオブジェクトや変数を一切作成せずに済み、定数空間での処理が実現できます。ループも1回だけで完結するため、計算量はオブジェクトのキー数に比例する線形時間となります。
なお、この実装ではobj2にのみ存在するキー(例:value9やvalue11)は結果に含まれない点に注意してください。あくまで「両方のオブジェクトに存在する同じキーの値を合計する」処理になっています。
-
JavaScriptで2つのオブジェクトをマージする方法を解説
JavaScriptでは、スプレッド構文(...)を使うことで、2つのオブジェクトを簡単に1つにマージ(結合)できます。各オブジェクトの前に「...」を付けて新しいオブジェクトリテラル内に展開するだけで、すべてのプロパティが統合されたオブジェクトが生成されます。以下に、2つのJavaScriptオブジェクトをマージするコードの例を示します。コード例<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=dev
-
【JavaScript入門】複数のオブジェクトを1つにマージして単一のオブジェクト配列を作成する方法
JavaScriptでは、Object.assign()メソッドとスプレッド構文(...)を組み合わせることで、配列内の複数のオブジェクトを1つのオブジェクトに簡単にマージすることができます。 Object.assign()は、1つ以上のコピー元オブジェクトから、コピー先のオブジェクトへすべてのプロパティをコピーするためのメソッドです。スプレッド構文を使って配列の要素を展開することで、各オブジェクトのキーと値が1つのオブジェクトに統合されます。 コード例 以下のコードは、配列内の複数のオブジェクトを単一のオブジェクトにマージする例です。 <!DOCTYPE html> <ht