【问题标题】:Clone element of array with typescript用打字稿克隆数组的元素
【发布时间】:2018-02-24 06:46:44
【问题描述】:

我在这个屏幕截图中有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);
}

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

克隆数组元素的正确方法是什么,以便以后可以在不影响原始对象的情况下对其进行编辑?

【问题讨论】:

    标签: arrays typescript clone


    【解决方案1】:

    您实际上并没有克隆对象。您再次推送对同一对象的引用。要克隆它,您可以使用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
    

    【讨论】:

    • 像魅力一样工作。非常感谢!
    猜你喜欢
    • 2015-03-24
    • 2013-01-26
    • 1970-01-01
    • 2021-01-10
    • 2021-12-31
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多