对象复制问题

时间:2019-02-10 08:37:28

标签: angular typescript

我将obj1复制到obj2,但是当我在obj2中进行更改时,对象obj1的值也在更改。如何停止呢?

  let p24:   ProductModule=new ProductModule();
                              p24=  this.productlist[g];
                              p24.variants=[];
                              p24.variants.push(p.variants[h]);
                                  this.newproductlist.push(p24);

这里this.productlist[g]是一个数组,但是当我执行p24.variants=[];this.productlist[g]中的action值也变为空

3 个答案:

答案 0 :(得分:1)

有多种方法可以在Javascript中克隆对象。

最简单的方法(深层克隆/复制);

p24=  JSON.parse(JSON.stringify(this.productlist[g]));

注意:通过执行此操作,您可以释放对象的原始类型。

或者您也可以按照JGFMK的建议查看Object.assignObject.create和spread(... object)运算符

答案 1 :(得分:1)

当您将javascript对象分配给另一个对象时,两者都将指向相同的内存位置。这就是如果您在一个对象上进行更新的原因,相同的对象将在另一个对象上进行更新。为了避免这种情况

选项1:

p24 =  JSON.parse(JSON.stringify(this.productlist[g]));

选项2:

p24 =   {...this.productlist[g]};

答案 2 :(得分:1)

数字是值类型,而对象是引用类型:

enter image description here

因此,将一个对象变量分配给另一个对象变量会使它们都引用(指向)同一对象。

您需要复制实例,而不要使用其他答案中显示的一种技术。

[注意:显示的此语法使用C#而不是TypeScript,但从概念上讲,它的作用相同。]