使用打字稿克隆数组元素

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