求助:基于三属性节点构建树形结构(已掌握父-子树构建)
构建三级树形结构解决方案
嘿,别担心,初次提问完全没问题~ 我来帮你搞定这个三级树形结构的构建!
从你给出的数组来看,我们要构建的是 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
相关产品推荐
相关产品推荐

