javascript - 为对象赋值,自动更新存储在数组中的现有对象
问题描述
我需要一些帮助。我有一个简单的 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
}
}
先感谢您!
解决方案
如果有人遇到这个问题,这就是我解决问题的方式:
根据发布的@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);
推荐阅读
- python - 用jinja2、html和flask构建动态表
- javascript - 无法在对象数组中搜索项目
- python-3.x - 正则表达式:提取日期的表达式不适用于 Series 对象引发错误
- python - Pygame:打破文本行以适应屏幕
- unity3d - 我可以在商业游戏中使用 Unity Asset Store 中的免费资源吗?
- twilio - 是否可以发送带有自定义“发件人”或“回复”号码的 Twilio SMS?
- java - PowerShell 终止其命令行检测到的 java 进程
- python-3.x - 是否可以在 Python 中匿名定义装饰器(使用 lambda 表达式)?
- python - 如何编码时间片以与 range() 函数一起使用?
- java - 无法从 InputStream 创建 zip 文件