在js中如何使用递归函数生成树状数据

102 阅读1分钟

如何使用递归获取树状数据

在一个项目接口获取的数据是扁平式的,类似下面这种,

Snipaste_2023-05-21_20-37-37.png

pid是指父级的id

在项目中使用需要的是锥形数据,下面这种

Snipaste_2023-05-21_21-01-02.png

想要得到这种效果,就需要我们来封装一个函数,来进行转换,根据id来找其子级,找到子级后,加在其中的children中去,按照这种思路我们来写代码。

    const arrTree = (arr, rootValue) => {
      const newarr = []
      arr.forEach(item => {
        if (item.pid === rootValue) {
          newarr.push(item)
        }
      })
      return newarr
    }

传入要处理的数组和id,对这个数组进行遍历,如果pid和传入的id相等的话,就说明当前的元素是其子元素或后代元素,那么我们就会得到一个子元素的数组,但是这样只会找第一层并不会往后找,就需要对递归进行一个简单的运用。

    const arrTree = (arr, rootValue) => {
      const newarr = []
      arr.forEach(item => {
        if (item.pid === rootValue) {
>            item.children = arrTree(arr, item.id)
          newarr.push(item)
        }
      })
      return newarr
    }

我们就需要在函数内调用这个函数,继续找当前数组,找当前元素的子元素,传入 arr item.id,给当前元素补一个children属性,就会得到树状数据了

微信图片_20230521215317.jpg