用typescript克隆数组元素

时间:2017-09-15 06:49:52

标签: arrays typescript clone

我在这个屏幕截图中有car个对象(我找不到在这里打印它的方法)

enter image description here

我想做一个克隆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);
}

我遇到的问题是,如果我之后更改了克隆对象中的一个值,它也会在原始对象中更改它。我无法理解为什么以及如何/为什么在执行上述方法之后原始和克隆相关。

克隆数组元素的正确方法是什么,以便以后编辑它而不会影响原始对象?

1 个答案:

答案 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