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

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);

代码说明

  1. 浅拷贝初始对象:用{...initialJson}创建新对象,确保每次循环的对象都是独立的,不会互相干扰
  2. 兼容键名差异:处理第一个对象的vehicle键,避免mycarname出现undefined
  3. 推入结果数组:每次循环把新生成的对象加入数组,最终就能得到你期望的多对象数组结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:45:07