JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【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にのみ存在するキー(例:value9value11)は結果に含まれない点に注意してください。あくまで「両方のオブジェクトに存在する同じキーの値を合計する」処理になっています。

  1. JavaScriptで2つのオブジェクトをマージする方法を解説

    JavaScriptでは、スプレッド構文(...)を使うことで、2つのオブジェクトを簡単に1つにマージ(結合)できます。各オブジェクトの前に「...」を付けて新しいオブジェクトリテラル内に展開するだけで、すべてのプロパティが統合されたオブジェクトが生成されます。以下に、2つのJavaScriptオブジェクトをマージするコードの例を示します。コード例<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=dev

  2. 【JavaScript入門】複数のオブジェクトを1つにマージして単一のオブジェクト配列を作成する方法

    JavaScriptでは、Object.assign()メソッドとスプレッド構文(...)を組み合わせることで、配列内の複数のオブジェクトを1つのオブジェクトに簡単にマージすることができます。 Object.assign()は、1つ以上のコピー元オブジェクトから、コピー先のオブジェクトへすべてのプロパティをコピーするためのメソッドです。スプレッド構文を使って配列の要素を展開することで、各オブジェクトのキーと値が1つのオブジェクトに統合されます。 コード例 以下のコードは、配列内の複数のオブジェクトを単一のオブジェクトにマージする例です。 <!DOCTYPE html> <ht