2017-08-09 78 views
2

我要附加到這個對象:是否有可能推對象爲在現有對象的屬性

var obj = 
{ 
    "myKey": 
    { 
     "subkey": [1,2,3] 
    } 
}; 

這個額外的子項的對象我想追加到obj

var addKeys = { 
    "subkey2" [3,4,5], 
    "subkey3" [5,6,7] 
} 

我想要做類似obj.myKey.push(addKeys);的東西,但我知道這隻適用於數組。我的最終目標應該是最終是這樣的:

var obj = 
{ 
    "myKey": 
    { 
     "subkey": [1,2,3], 
     "subkey2" [3,4,5], 
     "subkey3" [5,6,7] 
    } 
}; 
+2

嘗試'Object.assign(obj.my Key,addKeys)' –

回答

3

var obj = 
 
{ 
 
    "myKey": 
 
    { 
 
     "subkey": [1,2,3] 
 
    } 
 
}; 
 

 
var addKeys = { 
 
    "subkey2": [3,4,5], 
 
    "subkey3": [5,6,7] 
 
}; 
 
    
 
Object.assign(obj.myKey, addKeys) 
 
    
 
console.log(obj);

Object.assign將覆蓋第一個參數。這被稱爲「破壞性」操作。如果要合併的對象,並返回一個新問題:

var obj = 
 
{ 
 
    "myKey": 
 
    { 
 
     "subkey": [1,2,3] 
 
    } 
 
}; 
 

 
var addKeys = { 
 
    "subkey2": [3,4,5], 
 
    "subkey3": [5,6,7] 
 
}; 
 
    
 
var merged = Object.assign({}, obj.myKey, addKeys) 
 
    
 
console.log(merged); 
 
console.log(obj);

+0

這是正確的方法。舊的方式(在ES2015之前)將涉及使用更多不明顯的數據操作來獲得相同的結果。 – Cherna

+2

第二個不起作用。 –

+0

爲什麼第二個例子不工作?這是來自mdn文檔的示例:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Merging_objects_with_same_properties –

2

你在找什麼是Object.assign()

試試這個:

obj["myKey"] = Object.assign(obj["myKey"], addKeys) 

MDN reference

+0

不需要左側分配。第一個參數被修改。就像傳遞參考樣式一樣。 –

+0

如果OP要保持佈局的對象結構,則需要左側分配。否則,你正在創造一個失去它的巢穴的全新物體。 –

+0

我真的不認爲這是真的。 –

相關問題