我在这个屏幕截图中有car
个对象(我找不到在这里打印它的方法)
我想做一个克隆factory
中两个元素之一的函数。
我试过这样:
public cloneFactory(modelIndex: number, factoryIndex: number): void {
const newFactory = this.car.model[modelIndex].factory.slice(factoryIndex, factoryIndex + 1);
this.car.model[modelIndex].factory.push(newFactory[0]);
}
我也尝试过经典的方式:
public cloneFactory(modelIndex: number, factoryIndex: number): void {
const newFactory = this.car.model[modelIndex].factory[factoryIndex];
this.car.model[modelIndex].factory.push(newFactory);
}
我遇到的问题是,如果我之后更改了克隆对象中的一个值,它也会在原始对象中更改它。我无法理解为什么以及如何/为什么在执行上述方法之后原始和克隆相关。
克隆数组元素的正确方法是什么,以便以后编辑它而不会影响原始对象?
答案 0 :(得分:3)
您实际上并未克隆该对象。您正在再次推送对同一对象的引用。要克隆它,您可以使用Object.assign
:
const newFactory = Object.assign({}, this.car.model[modelIndex].factory[factoryIndex]);
以下是Object.assign
与仅指定引用相比的工作原理示例:
var obj = { a: 1 };
var objref2 = obj; // Just assigning reference; not a clone
var clone = Object.assign({}, obj); // Actual cloned copy of `obj`
obj.a = 100;
console.log(obj.a)
-> 100 // Value changed
console.log(objref2.a)
-> 100 // Value changed
console.log(clone.a)
-> 1 // Value unchanged