数组转树结构

153 阅读1分钟

思路:
1.首先,自己心里要明确的一件事是输入的数据类型是一个数组,数组里的每一个元素存储的是树结点的指针。
2. 初始化一个map容器。遍历数组的每一个树结点,然后以每个树结点的id为map的key值,value为树结点的指针。
3. 再遍历一次数组的每个树结点,用树结点的pid作为key值,去map容器找对应的父结点。如果有父结点,就将此树结点的指针放进属性为children的数组里,如果没有children属性,就声明一个children属性,并初始化为数组,最后将树结点的指针放进数组里。

       let array = [
        {
          id: 1,
          pid: 0,
          name: 'xh'
        },
        {
          id: 2,
          pid: 1,
          name: 'zq'
        },
        {
          id: 3,
          pid: 2,
          name:'hy'
        }
       ]
       function arrayToTree(array) {
        let map = new Map ();
        let treeSet = [];
        array.forEach(item => {
          map.set(item.id, item);
        });
        array.forEach(item => {
          let parent = map.get(item.pid);
          if(parent) {
            if(parent.children) {
              parent.children.push(item);
            }
            else {
              parent.children = []
              parent.children.push(item);
            }
          }
          else {
            treeSet.push(item);
          }
        })
        return treeSet
       }
       function travelTree(treeNode) {
          if(treeNode == null) return;
          console.log(treeNode.name);
          if(treeNode.children) {
             treeNode.children.forEach(item => {
              travelTree(item);
             })
          }
          else return;
       }
       function travelTreeSet(treeSet) {
            treeSet.forEach(item => {
              travelTree(item);
            })
       }
       travelTreeSet(arrayToTree(array))

数组转树结构-流程图.jpg