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

如何基于数组动态创建含同键不同值的嵌套JavaScript对象

解决动态嵌套JavaScript对象的问题

我看了你的代码和目标结果,问题根源很明确:你把current指向了data[i]这个数组,然后给数组添加name属性,但JSON序列化数组时只会保留索引对应的元素,自定义属性会被直接忽略,所以最后输出时只有第一个数组的内容,后续的嵌套结构全部丢失了。

你的目标结构里,每个name数组内部的对象才包含下一层的name数组,而不是数组本身拥有name属性。所以我们需要调整current的指向,让它每次指向数组里的对象,而非数组本身。

修改后的代码如下:

var data = [[{desc:"A", age:26}], [{desc:"B", age:12}], [{desc:"C", age:48}]] 
const keyName = "name" 
var json = {}; 
var current = json; 

for (var i = 0; i < data.length; i++) {
  // 给当前层级设置name属性,值为对应的数据数组
  current[keyName] = data[i];
  // 如果不是最后一项,将current切换为当前数组里的第一个对象,准备下一层嵌套
  if (i !== data.length - 1) {
    current = data[i][0];
  }
}

console.log(JSON.stringify(json));

运行这段代码后,就能得到你想要的目标对象:

{"name":[{"desc":"A","age":26,"name":[{"desc":"B","age":12,"name":[{"desc":"C","age":48}]}]}]}

简单梳理下逻辑:

  • 初始时current指向根对象json,先给它添加name属性,值为data[0]
  • 由于不是最后一项,把current切换为data[0]数组里的第一个对象,这样下一次循环时,给这个对象添加name属性,值为data[1]
  • 重复这个过程,直到最后一项,不需要再切换current,也就不会给最后一个对象添加额外的name属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:10