数据递归生产tree树

132 阅读1分钟

面试的时候遇到手写的,现场就懵逼了,回来看来别人写的,记录一下。 实现方法:

  const arr = [
      { id: 12, pid: 1, name: "分公司1" },
      { id: 1, pid: 0, name: "总公司" },
      { id: 121, pid: 12, name: "分公司1-1" },
      { id: 131, pid: 13, name: "分公司2-1" },
      { id: 133, pid: 13, name: "分公司2-3" },
      { id: 122, pid: 12, name: "分公司1-2" },
      { id: 13, pid: 1, name: "分公司2" },
      { id: 132, pid: 13, name: "分公司2-2" },
      { id: 123, pid: 12, name: "分公司1-3" },
      { id: 1231, pid: 123, name: "小分公司1122333" },
    ];

    function tree(data) {
      // 1.删除所有的children
      data.forEach(element => {
        delete element.children;
      });

      // 2.将数据存储为以id为key值的map索引
      var map = {};
      data.forEach((e) => {
        map[e.id] = e;
      })
      console.log(map);
      // 3.设置一个存储空间
      var list = [];
      data.forEach((item) => {
        var parent = map[item.pid];
        if (parent) {
          (parent.children || (parent.children = [])).push(item);
        } else {
          list.push(item)
        }
      });
      return list
    }

    console.log(tree(arr));


这个不能无限遍历,如果处理数据少的话还可以

更灵活配置请参考:https://www.cnblogs.com/jardeng/p/13541640.html

来源:https://blog.csdn.net/u013373006/article/details/82108873