将平铺的数组结构转成树形结构
初始数据如下:
const list = [
{ id: 1, name: '司令', pid: 0 },
{ id: 2, name: '军长', pid: 1 },
{ id: 3, name: '副军长', pid: 1 },
{ id: 4, name: '旅长', pid: 3 },
{ id: 5, name: '团长', pid: 4 },
]
方法一:
function arrToTree(list) {
// 定义最终需要返回的树形结构数据
let treeData = []
// 对传入的数组进行遍历
list.forEach(item => {
// 如果pid没有值,那就是顶级对象,直接添加进数组
if (!item.pid) {
treeData.push(item)
}
// 理解为二次遍历 :每个对象都找一遍自己的孩子添加到children
let objList = list.filter(data => data.pid === item.id)
if (objList.length) {
item.children = objList
}
})
return treeData
}
const treeData = arrToTree(list)
console.log(treeData);
方法二: 递归