首页 > 解决方案 > 为对象赋值,自动更新存储在数组中的现有对象

问题描述

我需要一些帮助。我有一个简单的 Angular 应用程序,它采用一些表单输入值。这些值被传递给一个简单的方法,其中这些值被分配给一个对象的匹配属性值。最后这个对象被推入一个数组。

我的问题是这个;每次将传递给方法的值分配给我的对象的属性值时,所有其他对象(已经在我的数组中)的属性也会更新。

我做错了什么(我相信这将成为我会怀念的那些编码花絮之一……有一天)?

我的代码: 这是分配值的对象:

UOPSim: Sim = {
    simId: null,
    simType: '',
    imageUrl: '',
    simCustomName: '',
    simDescription_Line1: '',
    simDescription_Line2: '',
    simDescription_Line3: '',
    simDescription_Line4: '',
    peakGigLimit: null,
    peakAmount: null,
    monthlyGigLimit: null,
    monthlyAmount: null,
};

这是我的方法:

onAddSimToCart(sim) {
    if (sim.simType === 'UOP') {
      this.UOPSim.simId = this.simsInCart.length + 1;
      this.UOPSim.simType = sim.simType;
      this.UOPSim.simCustomName = sim.simCustomName;
      this.UOPSim.peakGigLimit = sim.peakGigLimit;
      this.UOPSim.peakAmount = sim.peakAmount;
      this.UOPSim.monthlyGigLimit = sim.monthlyGigLimit;
      this.UOPSim.monthlyAmount = sim.monthlyAmount;
      this.simsInCart.push(this.UOPSim);
    } else {
        // do stuff
    }
}

先感谢您!

标签: javascriptangular

解决方案


如果有人遇到这个问题,这就是我解决问题的方式:

根据发布的@mbojko 答案,我只是在引用同一个对象(新动作!)。

我通过简单地掺杂以下方法解决了这个问题:

如果你想要浅拷贝,使用 Object.assign({}, a)

对于“深度”复制,使用 JSON.parse(JSON.stringify(a))

*感谢@Tareq 对这里帖子的回答:如何正确克隆 JavaScript 对象?

所以就我而言,我改为this.simsInCart.push(this.UOPSim);

const newSim = JSON.parse(JSON.stringify(this.UOPSim));
this.simsInCart.push(newSim);

推荐阅读