应用场景: 后端给的数据需要处理成如下树形结构数据.这时可以用递归很好的解决.
-
- 现在我们要处理一下数组.
-
- 观察发现一级部门的pid为 '',他下面的二级部门的pid等于他的id值,把他收集成为子集,这样就能形成树形结构.
- 先封装一个函数,在外面调用这个函数.(定义函数形参)
- 循环这个要处理数据的数组,定义一个新数组,将循环后的数据返回出来.
- 根据每一项的pid做判断,先筛选第一层的pid='',的数据.
- 在根据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));
最后得到的数据
这样就能收集子集数据,
不管有多少个子集数据,都能收集,这就是递归强大的地方,便捷好用.