使用打字稿克隆数组元素
Clone element of array with typescript
我在此屏幕截图中有 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);
}
我遇到的问题是,如果我之后更改克隆对象中的值之一,它也会更改原始对象中的值。我不明白为什么以及如何/为什么在执行上述方法之一后原始和克隆相关。
克隆数组元素的正确方法是什么,以便以后可以在不影响原始对象的情况下对其进行编辑?
您实际上并未克隆该对象。您再次将引用推送到同一对象。要克隆它,您可以使用 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
我在此屏幕截图中有 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);
}
我遇到的问题是,如果我之后更改克隆对象中的值之一,它也会更改原始对象中的值。我不明白为什么以及如何/为什么在执行上述方法之一后原始和克隆相关。
克隆数组元素的正确方法是什么,以便以后可以在不影响原始对象的情况下对其进行编辑?
您实际上并未克隆该对象。您再次将引用推送到同一对象。要克隆它,您可以使用 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