2017-08-09 42 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

我真的不认为这是真的。 –

相关问题