如何使用新的扩展运算符克隆一个具有数组的对象?使用扩散运算符的数组克隆对象
实施例对象:
vehicles: {
cars: [1, 2],
boats: [3, 4]
}
我想与在它的阵列中的新对象。在那个新的对象中,我希望能够改变或添加到一个没有参考和影响车辆对象的阵列。
如何使用新的扩展运算符克隆一个具有数组的对象?使用扩散运算符的数组克隆对象
实施例对象:
vehicles: {
cars: [1, 2],
boats: [3, 4]
}
我想与在它的阵列中的新对象。在那个新的对象中,我希望能够改变或添加到一个没有参考和影响车辆对象的阵列。
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);
伟大的解决方案! – Euroclydon37
如果你有大对象会怎么样?它会在这种情况下处理吗? – Sumit
我不明白为什么不,为什么不,如果你有一个大的单一级别的对象,我会建议使用Object.assign,(个人观点)我认为使用内置的语言功能更好的时候,他们会做这项工作。对于大型多级对象,此方法将正常工作。 –
你可以指定你的新对象的内容? – void
传播操作符使浅拷贝,所以任何深层对象仍然不幸被引用。 –