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

如何用GoJS创建单棵树结构?现有数据显示双树问题求助

解决方案

要只展示以名称为"101"的节点为根的树结构,核心是过滤出该根节点及其所有层级的后代节点,具体实现步骤如下:

1. 定位目标根节点

先从原数组中找到name: "101"的节点,它的key值为45,是整棵树的起点。

2. 递归收集所有后代节点

通过递归遍历,找出所有父节点链最终指向目标根节点的节点,将它们和根节点组合成新的数组。

完整代码实现

// 原节点数据数组
var nodeDataArray = [
    {key: 45, name:"101",email:"101",pic: ""},
    {key: 49, parent: 46,name:"102-1",email:"102-1",pic: ""},
    {key: 47, parent: 46,name:"102-2",email:"102-2",pic: ""},
    {key: 46, parent: 43,name:"102",email:"102",pic: ""},
    {key: 48, parent: 46,name:"102-3",email:"102-3",pic: ""},
    {key: 54, parent: 45,name:"101-1",email:"101-1",pic: ""},
    {key: 53, parent: 45,name:"101-2",email:"101-2",pic: ""},
    {key: 52, parent: 45,name:"101-3",email:"101-3",pic: ""},
];

// 找到目标根节点
const rootNode = nodeDataArray.find(node => node.name === "101");
if (!rootNode) {
    console.log("未找到名称为101的根节点");
}

// 递归收集根节点及其所有后代
function gatherTreeNodes(rootKey, allNodes) {
    // 获取当前节点的直接子节点
    const directChildren = allNodes.filter(node => node.parent === rootKey);
    // 递归收集子节点的后代,再合并根节点本身
    return [rootNode, ...directChildren.flatMap(child => gatherTreeNodes(child.key, allNodes))];
}

// 得到仅包含101为根的树节点数组
const targetTreeNodes = gatherTreeNodes(rootNode.key, nodeDataArray);
console.log(targetTreeNodes);

效果说明

执行后targetTreeNodes数组仅包含:

  • 根节点{key:45, name:"101",...}
  • 它的三级子节点101-1、101-2、101-3

用这个过滤后的数组渲染树结构,就只会显示以"101"为根的单棵树。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:45:19