JavaScript循环赋值仅保留单个值,求助生成指定结构JSON数组
循环更新JSON后仅保留单个值的解决方案
嘿,我来帮你搞定这个问题!先理清楚你遇到的核心问题:你现在的代码每次循环都在同一个json对象上覆盖属性值,所以循环跑完后自然只剩最后一次的结果,而不是生成你想要的多个对象数组。
你的问题背景
- 初始JSON:
{ "Myname":"Nate" }
- 待处理的属性结构:
const Myproperty = [{ "vehicle": "car", "color": "Red" }, { "name": "van", "color": "white" }, { "name": "Truck", "color": "Blue" }];
- 你使用的代码:
for (var i = 0; i < Myproperty.length; i++) { json.mycarname = Body.Myproperty[i].name; json.mycolor = Body.Myproperty[i].color; }
- 期望结果:
[{ "Myname": "Nate", "mycarname": "car", "mycolor": "Red" }, { "Myname": "Nate", "mycarname": "van", "mycolor": "white" }, { "Myname": "Nate", "mycarname": "Truck", "mycolor": "Blue" }]
问题原因
你每次循环都直接修改同一个json对象的mycarname和mycolor属性,相当于每次都把旧值覆盖掉,循环结束后自然只保留最后一次循环的赋值结果。
解决方案
我们需要创建一个结果数组,每次循环都基于初始JSON生成一个新对象,给新对象添加对应属性后再推入数组,这样就不会出现覆盖问题了。另外注意你的第一个属性对象用的是vehicle而不是name,这里要做个兼容处理,避免出现undefined:
// 初始JSON对象 const initialJson = { "Myname":"Nate" }; // 待处理的属性数组 const Myproperty = [{ "vehicle": "car", "color": "Red" }, { "name": "van", "color": "white" }, { "name": "Truck", "color": "Blue" }]; // 存储最终结果的数组 const finalResult = []; for (let i = 0; i < Myproperty.length; i++) { // 浅拷贝初始对象,创建一个新的对象实例 const newItem = {...initialJson}; // 兼容第一个对象的vehicle键,优先取name,没有则取vehicle newItem.mycarname = Myproperty[i].name || Myproperty[i].vehicle; newItem.mycolor = Myproperty[i].color; // 将新对象加入结果数组 finalResult.push(newItem); } console.log(finalResult);
代码说明
- 浅拷贝初始对象:用
{...initialJson}创建新对象,确保每次循环的对象都是独立的,不会互相干扰 - 兼容键名差异:处理第一个对象的
vehicle键,避免mycarname出现undefined - 推入结果数组:每次循环把新生成的对象加入数组,最终就能得到你期望的多对象数组结构
内容的提问来源于stack exchange,提问作者karan
相关产品推荐
相关产品推荐

