处理树形数据---递归

447 阅读1分钟

应用场景: 后端给的数据需要处理成如下树形结构数据.这时可以用递归很好的解决.

image.png

    1. 现在我们要处理一下数组.

image.png

    1. 观察发现一级部门的pid为 '',他下面的二级部门的pid等于他的id值,把他收集成为子集,这样就能形成树形结构.
  1. 先封装一个函数,在外面调用这个函数.(定义函数形参)
  2. 循环这个要处理数据的数组,定义一个新数组,将循环后的数据返回出来.
  3. 根据每一项的pid做判断,先筛选第一层的pid='',的数据.
  4. 在根据pid与id是否匹配,筛选非一级的数据,加在一级的子节点下面. 代码如下
 // 封装一个函数
    function toDo(arr,pid=''){
      // 声明一个空数组,得到处理后的数据
      var newArr=[]
      // 1.循环数组
      arr.forEach(item=>{      
        if(item.pid===pid){
          var child=toDo(arr,item.id)
         // 3.筛选不是第一层 收集子集
         if(child.length){
           item.children=child
         }
        // 2.收集一级
        newArr.push(item)
        }
      })
      return newArr
    }
    // 调用函数
    console.dir(toDo(arr));

image.png

最后得到的数据

image.png

这样就能收集子集数据,不管有多少个子集数据,都能收集,这就是递归强大的地方,便捷好用.

image.png