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

如何基于预定义顶级父节点值生成任意层级嵌套的分类树结构

分类列表生成任意层级嵌套子树方案

需求

需要从扁平的分类列表中生成对应的树形结构,支持无限层级嵌套。

输入数据

[
  { "parent_id": -1, "name": "Toothpaste", "id": 99 },
  {
    "parent_id": -1,
    "name": "Cake",
    "id": 3
  },
  {
    "parent_id": 3,
    "name": "Chocolate  Cake",
    "id": 4
  },
  {
    "parent_id": 3,
    "name": "Walnut Cake",
    "id": 5
  },
  {
    "parent_id": 4,
    "name": "Chocolate Cake mixin 1",
    "id": 6
  }
]

期望输出

[
  { "parent_id": -1, "name": "Toothpaste", "id": 99, "children": [] },
  {
    "parent_id": -1,
    "name": "Cake",
    "id": 3,
    "children":[
      {
        "parent_id": 3,
        "name": "Chocolate  Cake",
        "id": 4,
        "children":[
          {
            "parent_id": 4,
            "name": "Chocolate Cake mixin 1",
            "id": 6,
            "children": []
          }
        ]
      },
      {
        "parent_id": 3,
        "name": "Walnut Cake",
        "id": 5,
        "children": []
      }
    ]
  }
]

问题原因

原有代码仅将根节点(parent_id=-1)存入映射表并初始化children属性,二级及更深层级的节点没有存入映射表,所以处理三级节点时找不到对应的父节点,无法插入到二级节点的children数组中。

修复后代码

function getChildrenTree(childList){
  // 1、创建id到节点的映射表,给所有节点初始化children属性
  const nodeMap = {};
  childList.forEach(node => {
    // 浅拷贝节点避免修改原数据,不需要的话可以直接 node.children = [] 赋值
    nodeMap[node.id] = {...node, children: []};
  });
  // 2、遍历所有节点,将子节点挂到对应父节点的children下
  const rootNodes = [];
  childList.forEach(node => {
    const currentNode = nodeMap[node.id];
    if (node.parent_id === -1) {
      rootNodes.push(currentNode);
      return;
    }
    // 找到父节点,把当前节点插入父节点的children
    const parentNode = nodeMap[node.parent_id];
    if (parentNode) {
      parentNode.children.push(currentNode);
    }
  });
  return rootNodes;
}

// 测试
console.log(getChildrenTree([ 
  { "parent_id": -1, "name": "Toothpaste", "id": 99 },
  { "parent_id": -1, "name": "Cake", "id": 3 }, 
  { "parent_id": 3, "name": "Chocolate  Cake", "id": 4 }, 
  { "parent_id": 3, "name": "Walnut Cake", "id": 5 }, 
  { "parent_id": 4, "name": "Chocolate Cake mixin 1", "id": 6 } 
]))

该方案支持任意层级的嵌套,不管有多少级子分类都能正确生成树形结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:36:03