2016-08-18 210 views
-2

我有兩個兩級JavaScript結構,我需要合併。什麼是最簡單的方法?合併兩個對象

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

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

對象2中包含由用戶界面所做的更改,我需要得到的合併對象,顯示所有的數據,只存在於對象2的對象2的值覆蓋這些屬性。

+0

所以導致了SECTION1應該只有' 「爲prop1」:0'沒有'prop2'? –

+0

@NenadVracar Object1是從設備加載的完整配置。 Object2僅包含用戶所做的更改,尚未保存到設備中(需要將它們合併到第1個對象中,以便將包含新更改的選項的原始配置發送到設備)。我已經更新了源代碼 - object2.section1.prop1現在的值爲1,我想將它合併到object1中。 – Kokesh

+0

因此,section1的結果是prop1和prop2,prop1從object2更新了 –

回答

0

var mergedObj = Object.assign({}, object1, object2)如果我正確理解你的問題。

1

您可以使用Object.keys()reduce()做到這一點,並在發現對象2時使用Object.assign()更新每個對象。

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);