处理后台平铺数据,变成树形数据
后台发来的数据是一级的数组对象
我们在做树状图是需要树形结构数据
用children存储二级数据
如:
arr=[
{id:"01", pid:"", "name":"老王" },
{id:"02", pid:"01", "name":"小张" }
]
上面的结构说明: 老王是小张的上级
实现后结构:
arr=[
{id:"01", pid:"", "name":"老王",children:[
{id:"02", pid:"01", "name":"小张" }
] },
]
/**
* 把平铺的数组变成树状的数组的函数
*/
function tranListToTreeData(arr) {
const treeArr = []
const map = {}
// 遍历出得到以id为属性名,这个id的全部信息为属性值的数组对象,
//方便后面遍历出pid来与id进行比较 存储数据
// 给所有的id都添加一个children属性名
arr.forEach(item => {
item.children = []
map[item.id] = item
})
// 再次遍历来将pid拿出来,如果有pid就是有上级,
//就会被加入到pid=id的那个领导的children中,
//否则就是一级,直接推进准备好的treeList数组
arr.forEach(item => {
const pItem = map[item.pid]
if (pItem) {
pItem.children.push(item)
} else {
treeArr.push(item)
}
})
return treeArr
}