JavaScript遍历对象并填充至另一对象的实现问题求助
解决方法:遍历对象数组并合并到目标数组(保留原有值)
看起来你遇到的核心问题是变量名拼写错误、字段映射不正确,以及没有正确合并数组(而是试图覆盖原有值)。下面是修正后的完整实现:
步骤说明
- 修正拼写错误:你的代码里多处变量名写错(比如
data.ses→data.scs,createues是目标字段名,要和原始对象/预期输出统一)。 - 正确转换数据源项:遍历
data.scs数组,将每个项映射为{ field: 对应Id值, value: Value }的格式。 - 合并数组:使用扩展运算符保留原有
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
相关产品推荐
相关产品推荐

