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

JavaScript中如何将树形结构JSON转换为嵌套对象

树形结构JSON反向转嵌套对象实现方案

核心转换逻辑采用递归遍历实现,和正向嵌套对象转树的逻辑完全对应,处理规则如下:

  • 遍历当前层级的所有树节点
  • 对每个节点,提取name字段作为父对象的键名,提取children字段作为待递归处理的子节点列表,节点其余属性直接保留为该键对应对象的自有属性
  • 若当前节点存在非空children数组,递归执行转换逻辑处理所有子节点,将子节点转换结果合并到当前节点对象中
  • 所有节点处理完成后返回当前层级的结果对象

实现代码(JavaScript)

function treeToNested(treeList) {
  const res = {}
  for (const node of treeList) {
    // 分离name、children和节点自有属性
    const { name, children, ...nodeProps } = node
    const current = { ...nodeProps }
    // 存在子节点则递归处理,合并结果到当前节点
    if (children?.length) {
      Object.assign(current, treeToNested(children))
    }
    res[name] = current
  }
  return res
}

// 调用示例
const input = [
  {
    "name": "DI",
    "children": [
      {
        "name": "t",
        "children": [
          {"name": "tID", "ir": true, "is": false},
          {"name": "tTime", "ir": false, "is": false}
        ],
        "ir": false,
        "is": false
      },
      {
        "name": "i",
        "children": [
          {"name": "idu", "ir": false, "is": false},
          {"name": "il", "ir": false, "is": false},
          {
            "name": "ibId",
            "children": [
              {"name": "ib1", "ir": false, "is": false},
              {"name": "ib2", "ir": false, "is": false}
            ],
            "ir": false,
            "is": false
          }
        ],
        "ir": false,
        "is": false
      }
    ]
  }
]

const result = treeToNested(input)

注意事项

你给出的预期输出示例中,idu节点下存在重复的ir键,属于笔误。上述代码转换后的结果会严格保留节点原有属性,不会出现重复键问题,结构和你预期的嵌套格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:27:33