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

如何将JavaScript对象数组合并为指定结构的单个对象?

如何将JavaScript对象数组转换为指定的嵌套对象结构?

你好呀~我看你作为JavaScript和JSON新手,正在尝试把一个对象数组转换成特定的嵌套对象结构,不过之前的代码没达到预期,咱们一步步来解决这个问题:

首先,先明确你的原始数据:

let data = [
 { "build_name":"name1", "build_type":"element", "info":{ "element":"testvalue", "repository":"mag", "version":123 } },
 { "build_name":"name2", "build_type":"element", "info":{ "element":"abcd", "repository":"uuuuu", "version":"ttttt" } }
];

你想要的预期结果是:

{
 "build":{
  "name1":{ "type":"element", "info":{ "element":"testvalue", "repository":"mag", "version":123 } },
  "name2":{ "type":"element", "info":{ "element":"abcd", "repository":"uuuuu", "version":"ttttt" } }
 }
}

先看看你之前代码的问题:

  • 你用了数组test来存储每一项,但预期结果里build是一个对象,不是数组,所以不需要用数组收集;
  • 你创建的test2对象结构错误——把[arr.build_name]和"info"放在了同一层级,而不是把info嵌套在[arr.build_name]对应的对象里;
  • 最后尝试把数组test直接放进{"build" : { test } },这会导致语法错误,对象中不能直接用这种方式嵌套数组变量。

正确的实现方法:

我们可以先创建目标对象,然后遍历原始数组,把每一项的build_name作为键,对应的type和info作为值嵌套进去:

let data = [
 { "build_name":"name1", "build_type":"element", "info":{ "element":"testvalue", "repository":"mag", "version":123 } },
 { "build_name":"name2", "build_type":"element", "info":{ "element":"abcd", "repository":"uuuuu", "version":"ttttt" } }
];

// 初始化目标对象
const result = { build: {} };

// 遍历原始数组
data.forEach(item => {
  // 把每个item的build_name作为键,对应的type和info作为值
  result.build[item.build_name] = {
    type: item.build_type,
    info: item.info // 直接复用原info对象即可,不需要重新解构赋值
  };
});

console.log(JSON.stringify(result, null, 2));

代码解释:

  • 首先创建result对象,里面先初始化build为一个空对象,匹配你预期的最外层结构;
  • 遍历data数组时,每一项的build_name作为result.build的属性名;
  • 每个属性对应的对象包含type(对应原build_type)和info(直接复用原对象里的info,省去手动复制每个属性的麻烦);
  • 最后用JSON.stringify带缩进参数输出,就能得到你想要的格式化后的JSON结构啦。

如果你想更简洁,还可以用reduce方法实现:

const result = {
  build: data.reduce((acc, item) => {
    acc[item.build_name] = { type: item.build_type, info: item.info };
    return acc;
  }, {})
};

console.log(JSON.stringify(result, null, 2));

reduce方法会从一个空对象开始,把每一项的内容逐步添加进去,最终得到build对应的对象,效果和forEach完全一致,看你习惯哪种写法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:52:42