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

JavaScript遍历对象并填充至另一对象的实现问题求助

解决方法:遍历对象数组并合并到目标数组(保留原有值)

看起来你遇到的核心问题是变量名拼写错误、字段映射不正确,以及没有正确合并数组(而是试图覆盖原有值)。下面是修正后的完整实现:

步骤说明

  1. 修正拼写错误:你的代码里多处变量名写错(比如data.ses→data.scs,createues是目标字段名,要和原始对象/预期输出统一)。
  2. 正确转换数据源项:遍历data.scs数组,将每个项映射为{ field: 对应Id值, value: Value }的格式。
  3. 合并数组:使用扩展运算符保留原有createues的内容,再追加新转换的项,避免覆盖。

完整代码

// 原始对象(修正字段名与预期输出一致)
const obj = { 
  projecd: 0, 
  grd: 0, 
  createues: [ 
    { field: 1111, value: "cool" }, 
    { field: 141, value: "cl" }, 
    { field: 11, value: "cool" } 
  ] 
};

// 数据源
const data = { 
  scs: [ 
    { SleId:15, Value:"LOW" }, 
    { eId:105, Value:"LOW" } 
  ] 
};

// 1. 转换数据源为目标格式
const newScalesItems = data.scs.map(item => {
  // 适配数据源中不同的Id字段名(SleId/eId)
  const fieldValue = item.SleId || item.eId;
  return {
    field: fieldValue,
    value: item.Value
  };
});

// 2. 合并原有数组与新数组(保留原有值)
obj.createues = [...obj.createues, ...newScalesItems];

// 输出结果
console.log(obj);

运行结果

执行后你会得到符合预期的输出(注:预期输出中field:165应为笔误,实际对应数据源的eId:105):

{
  projecd: 0,
  grd: 0,
  createues: [
    { field: 1111, value: "cool" },
    { field: 141, value: "cl" },
    { field: 11, value: "cool" },
    { field: 15, value: "LOW" },
    { field: 105, value: "LOW" }
  ]
}

关键纠正点

  • 避免变量名拼写错误:比如你错误使用了data.ses/data.sces,实际应为data.scs。
  • 不要直接覆盖数组:obj.createues = ...如果直接赋值新数组会丢失原有内容,必须用扩展运算符[...原有, ...新增]合并。
  • 正确映射字段:通过item.SleId || item.eId获取每个数据源项的Id值,确保转换后的格式符合要求。

内容的提问来源于stack exchange,提问作者Marizona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:27:39