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

JavaScript中向数组推入对象出现值重复问题求助

问题分析与解决:数组对象引用导致字段值被覆盖

问题根源

你遇到的核心问题是JavaScript中对象属于引用类型:两次调用arrMap.map时,直接修改了arrMap数组内的原始对象,而非创建新对象。第一次map操作将原对象的field_value设为BUILDING1并推入arrValues,第二次map又对同一个原对象的field_value修改为BUILDING2。由于arrValues中两个对象的values字段指向的是同一个对象引用,最终显示的都是最后一次修改的值。

解决方法

在map函数内部创建新对象,复制原对象的所有属性后再添加field_value,避免修改原数组的对象。可以使用对象展开语法(...)或Object.assign实现属性复制。

修改后的代码

let arrMap = [{
  "field_desc": "Building Name",
  "type": "string"
}]
let objFind = {
  values: [
    ["BUILDING1", "BUILDING2"],
    []
  ]
}

let arrValues = [];

// 生成第一个行对象
arrValues.push({
  row: 0,
  values: arrMap.map(element => ({
    ...element, // 复制原对象的所有属性
    field_value: objFind.values[0][0]
  }))
});

// 生成第二个行对象
arrValues.push({
  row: 1,
  values: arrMap.map(element => ({
    ...element,
    field_value: objFind.values[0][1]
  }))
});

console.log(arrValues);

验证结果

运行修改后的代码,输出将与预期一致:

[{
  "row": 0,
  "values": [{
    "field_desc": "Building Name",
    "type": "string",
    "field_value": "BUILDING1"
  }]
}, {
  "row": 1,
  "values": [{
    "field_desc": "Building Name",
    "type": "string",
    "field_value": "BUILDING2"
  }]
}]

内容的提问来源于stack exchange,提问作者bob-bobberson3rd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:05:12