菜鸟-404 2023-03-14 11:54 采纳率: 50%
浏览 62
已结题

怎么将上面这种数据格式转成下面这种格式啊,tree结构

请教各位大lao

img

怎么将上面这种数据格式转成下面这种格式啊,tree结构

img

  • 写回答

3条回答 默认 最新

  • MarkHan_ 2023-03-14 12:11
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    如果您的 pid 字段是无效的,那么可以使用以下方法将原始数据格式转换成树形结构:

    function buildTree(data) {
      let map = {}, node, roots = [], i;
      for (i = 0; i < data.length; i += 1) {
        map[data[i].id] = i;
        data[i].children = [];
      }
      for (i = 0; i < data.length; i += 1) {
        node = data[i];
        if (node.pid !== 0) {
          data[map[node.pid]].children.push(node);
        } else {
          roots.push(node);
        }
      }
      return roots;
    }
    
    
    

    这个函数遍历输入数据数组两次。第一次遍历创建一个哈希表 map,它的键是每个节点的 id 值,值是该节点在数组中的索引。同时在每个节点上添加一个空数组 children,以便在第二次遍历时将它们添加为父节点的子节点。第二次遍历遍历数据数组,并将每个节点添加到它的父节点的 children 数组中,或者添加到根节点数组 roots 中,如果节点没有父节点。

    调用这个函数可以将原始数据转换成树形结构:

    let data = [
      { id: 1, name: 'Node 1', pid: 0 },
      { id: 2, name: 'Node 2', pid: 1 },
      { id: 3, name: 'Node 3', pid: 2 },
      { id: 4, name: 'Node 4', pid: 0 },
      { id: 5, name: 'Node 5', pid: 4 },
      { id: 6, name: 'Node 6', pid: 5 }
    ];
    
    let tree = buildTree(data);
    console.log(tree);
    
    
    

    这将输出以下树形结构:

    [  {    "id": 1,    "name": "Node 1",    "pid": 0,    "children": [      {        "id": 2,        "name": "Node 2",        "pid": 1,        "children": [          {            "id": 3,            "name": "Node 3",            "pid": 2,            "children": []
              }
            ]
          }
        ]
      },
      {
        "id": 4,
        "name": "Node 4",
        "pid": 0,
        "children": [
          {
            "id": 5,
            "name": "Node 5",
            "pid": 4,
            "children": [
              {
                "id": 6,
                "name": "Node 6",
                "pid": 5,
                "children": []
              }
            ]
          }
        ]
      }
    ]
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏
  • ¥15 Wanted but not invoked:Actually, there were zero interactions with this moc
  • ¥20 怎么驱动tb6612