You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular/Firebase项目数组对象值重复问题求助

对象值重复问题的原因与修复

问题根源

你遇到的问题是因为JavaScript对象是引用类型:循环外创建的objectToInsert是同一个对象,每次循环只是修改它的属性值,而push到数组里的都是这个对象的引用。当循环结束时,i最终等于2,数组里的两个引用指向的都是最后修改后的对象,所以两个元素的dropNumber都是2。

修复方案

方案1:循环内创建新对象

把对象的定义放到循环内部,确保每次迭代都生成一个全新的对象:

createAutoObject() {
  this.drops.length = 0;

  for (let i = 1; i <= 2; i++) {
    let objectToInsert = {
      campaignName: campaignObject.campaignName,
      dropStatus: '',
      isSeededReceived: false,
      isLastDrop: false,
      isDropCompleted: false,
      dropNumber: i,
      dropVolume: campaignObject.firstDropVolume,
    };
    this.drops.push(objectToInsert);
  }
  return this.drops;
}

方案2:使用对象复制生成独立实例

如果需要复用基础对象结构,可以用展开运算符(...)在每次循环时复制基础对象,再修改特定属性:

createAutoObject() {
  this.drops.length = 0;

  // 定义基础对象模板
  const baseDropObject = {
    dropStatus: '',
    isSeededReceived: false,
    isLastDrop: false,
    isDropCompleted: false,
    dropNumber: 0,
    dropVolume: '',
  };

  for (let i = 1; i <= 2; i++) {
    // 复制基础对象并覆盖动态属性
    const objectToInsert = {
      ...baseDropObject,
      campaignName: campaignObject.campaignName,
      dropNumber: i,
      dropVolume: campaignObject.firstDropVolume,
    };
    this.drops.push(objectToInsert);
  }
  return this.drops;
}

两种方案都能保证数组中的每个元素都是独立的对象实例,修改其中一个不会影响其他元素的属性值。

内容的提问来源于stack exchange,提问作者Wahéb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:48:14