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

求助:基于三属性节点构建树形结构(已掌握父-子树构建)

构建三级树形结构解决方案

嘿,别担心,初次提问完全没问题~ 我来帮你搞定这个三级树形结构的构建!

从你给出的数组来看,我们要构建的是 City → Home → Ref 的三级层级结构对吧?核心思路就是通过遍历原数组,逐层分组嵌套,我给你写个具体的实现示例(用JavaScript,如果你用其他语言,逻辑思路是完全一致的):

实现代码

const data = [
  {Ref: "1.1", Home: 1, City: "City1"},
  {Ref: "2.1", Home: 2, City: "City2"},
  {Ref: "1.2", Home: 1, City: "City1"},
  {Ref: "1.3", Home: 1, City: "City1"},
  {Ref: "2.2", Home: 2, City: "City2"},
  {Ref: "2.3", Home: 2, City: "City2"}
];

// 初始化最终的树形结构数组
const tree = [];

// 遍历每一条数据,逐层构建节点
data.forEach(item => {
  // 1. 检查当前City是否已存在于树形结构中
  let cityNode = tree.find(node => node.City === item.City);
  
  // 不存在则创建新的City节点并加入树形结构
  if (!cityNode) {
    cityNode = {
      City: item.City,
      children: []
    };
    tree.push(cityNode);
  }
  
  // 2. 在当前City的子节点中查找对应的Home节点
  let homeNode = cityNode.children.find(node => node.Home === item.Home);
  
  // 不存在则创建新的Home节点并加入City的子节点
  if (!homeNode) {
    homeNode = {
      Home: item.Home,
      children: []
    };
    cityNode.children.push(homeNode);
  }
  
  // 3. 将当前的Ref项挂载到对应Home的子节点下
  homeNode.children.push({ Ref: item.Ref });
});

console.log(tree);

最终输出结构

运行上面的代码后,你会得到符合预期的树形结构:

[
  {
    "City": "City1",
    "children": [
      {
        "Home": 1,
        "children": [
          {"Ref": "1.1"},
          {"Ref": "1.2"},
          {"Ref": "1.3"}
        ]
      }
    ]
  },
  {
    "City": "City2",
    "children": [
      {
        "Home": 2,
        "children": [
          {"Ref": "2.1"},
          {"Ref": "2.2"},
          {"Ref": "2.3"}
        ]
      }
    ]
  }
]

这个思路的核心就是逐层校验并创建节点:先处理最顶层的City,再处理中间层的Home,最后把最底层的Ref挂载到对应Home下。如果需要调整结构(比如给Ref保留更多属性、修改节点键名),只需要在创建节点时做对应调整就好啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:48:39