对象复制问题

问题描述 投票:0回答:3

我复制到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=[]; acction值内this.productlist[g]也成为空

angular typescript
3个回答
1
投票

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

最简单的方法(深克隆/复印件);

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

注:通过这样做,你可能会失去原来的类型的对象。

或者你也可以看看Object.assignObject.create和扩散(...对象)操作员通过JGFMK的建议


1
投票

当您指定JavaScript对象到另一个对象,都将指向同一个内存位置。那是,如果你一个对象上更新的原因,同样会被更新的另一个。为了避免这种情况

选项1 :

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

选项2:

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

1
投票

号码值类型和对象是引用类型:

enter image description here

所以分配一个对象变量到另一个对象变量使它们二者以引用(指向)相同的对象。

你需要复制,而不是使用在其他的答案显示的技术之一的实例。

[注:显示此语法使用C#,而不是打字稿,但在概念上它的工作原理是相同的。]

© www.soinside.com 2019 - 2024. All rights reserved.