如何使用递归获取树状数据
在一个项目接口获取的数据是扁平式的,类似下面这种,
pid是指父级的id
在项目中使用需要的是锥形数据,下面这种
想要得到这种效果,就需要我们来封装一个函数,来进行转换,根据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属性,就会得到树状数据了