2017-10-19 22 views
1

如何使用新的扩展运算符克隆一个具有数组的对象?使用扩散运算符的数组克隆对象

实施例对象:

vehicles: { 
    cars: [1, 2], 
    boats: [3, 4] 
} 

我想与在它的阵列中的新对象。在那个新的对象中,我希望能够改变或添加到一个没有参考和影响车辆对象的阵列。

+0

你可以指定你的新对象的内容? – void

+0

传播操作符使浅拷贝,所以任何深层对象仍然不幸被引用。 –

回答

3

Object.assign和spread运算符创建浅层克隆,只有它们被引用的深度只有一层。我发现的最好的方法(感谢MDN)是使用JSON函数来创建一个真正的克隆。

let vehicles = { 
 
    cars: [1, 2], 
 
    boats: [3, 4], 
 
}; 
 

 
let test = JSON.parse(JSON.stringify(vehicles)); 
 

 
console.log(vehicles, test); 
 

 
test.cars[0] = 5; 
 
vehicles.cars[0] = 7; 
 

 
console.log(vehicles, test);

+0

伟大的解决方案! – Euroclydon37

+0

如果你有大对象会怎么样?它会在这种情况下处理吗? – Sumit

+0

我不明白为什么不,为什么不,如果你有一个大的单一级别的对象,我会建议使用Object.assign,(个人观点)我认为使用内置的语言功能更好的时候,他们会做这项工作。对于大型多级对象,此方法将正常工作。 –