2016-08-18 11 views
-2

私はマージする必要がある2つの2レベルのJavaScript構造を持っています。最も簡単な方法は何ですか?2つのオブジェクトをマージする

var object1={ 
    "section1": { 
    "prop1": 0, 
    "prop2": 0 
    }, 
    "section2": { 
    "something": 0, 
    "other": 0 
    } 
} 

var object2={ 
    "section1": { 
    "prop1": 1 
    } 
} 

object2は、ユーザーによるUIで行われた変更が含まれていると私は、オブジェクト2の値で上書きobject2は中に存在する唯一のこれらのプロパティで、すべてのデータを示し、マージされたオブジェクトを取得する必要があります。

+0

だから ' "PROP1" のみであるべきセクション1のためになりますか? –

+0

@NenadVracar Object1はデバイスから読み込まれた完全な設定です。 Object2には、まだデバイスに保存されていない、ユーザーが行った変更のみが含まれています(最初のオブジェクトにマージする必要があるため、新しく変更されたオプションを含む元の設定をデバイスに送信できます)。私はソースを更新しました - object2.section1.prop1はobject1にマージしたい値1を持っています。 – Kokesh

+0

したがって、セクション1はprop1、prop2はprop1がobject2から更新されました –

答えて

0

var mergedObj = Object.assign({}, object1, object2)私はあなたの質問を正しく理解しています。

1

Object.keys()reduce()でこれを行うことができ、Object.assign()でkeyが見つかった場合はオブジェクトを更新できます。 '0' prop2`なし:

var object1={ 
 
    "section1": { 
 
    "prop1": 0, 
 
    "prop2": 0 
 
    }, 
 
    "section2": { 
 
    "something": 0, 
 
    "other": 0 
 
    } 
 
} 
 

 
var object2={ 
 
    "section1": { 
 
    "prop1": 5 
 
    } 
 
} 
 

 
var result = Object.keys(object1).reduce(function(r, k) { 
 
    if(object2[k]) { 
 
    r[k] = Object.assign({}, object1[k], object2[k]); 
 
    } else { 
 
    r[k] = object1[k]; 
 
    } 
 
    return r; 
 
}, {}); 
 

 
console.log(result);

関連する問題