JavaScript中如何将对象指定属性转为对象数组并添加回原对象
对象数组转换解决方案
现有代码错误点
- 共享引用问题:
obj1对象、qty数组定义在循环外部,每次循环修改的是同一个内存地址的对象,且所有项的qty字段都指向同一个数组,最终所有元素内容会互相影响 - 缺少total_rate统一逻辑:预期结果中所有项的total_rate均为38000,原逻辑没有处理该字段
- 变量未合规声明:
qrt1、rate1未使用let/const声明,会泄露为全局变量
正确实现代码
方案1:遍历修改原数组(和你的实现思路对齐)
// 按预期取统一的total_rate,这里取原数组最后一项的total_rate,也可根据需求替换为取最大值等逻辑 const finalTotalRate = obj[obj.length - 1].total_rate for (let i = 0; i < obj.length; i++) { // 每次循环创建独立的子对象和数组,避免引用共享 const qtySubItem = { qty: obj[i].qty, rate: obj[i].rate } obj[i].qty = [qtySubItem] obj[i].total_rate = finalTotalRate }
方案2:map生成新数组(不修改原数组,更推荐)
const finalTotalRate = obj.at(-1).total_rate const transformedObj = obj.map(item => ({ org_id: item.org_id, qty: [ { qty: item.qty, rate: item.rate } ], total_rate: finalTotalRate }))
运行后transformedObj即为你需要的目标数组。
内容的提问来源于stack exchange,提问作者AbhiSam
相关产品推荐
相关产品推荐

