1.使用递归方法
// 把平铺的数组结构转成树形结构
const arr = [
{ 'id': '29', 'pid': '', 'name': '总裁办' },
{ 'id': '2c', 'pid': '', 'name': '财务部' },
{ 'id': '2d', 'pid': '2c', 'name': '财务核算部' },
{ 'id': '2f', 'pid': '2c', 'name': '薪资管理部' },
{ 'id': 'd2', 'pid': '', 'name': '技术部' },
{ 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' }
]
export function arrayToTree(arr, pid) {
//先找出children的父级
const tree = arr.filter(item => item.pid === pid)
// [
// { 'id': '29', 'pid': '', 'name': '总裁办' },
// { 'id': '2c', 'pid': '', 'name': '财务部' },
// { 'id': 'd2', 'pid': '', 'name': '技术部' }
// ]
//开始遍历并添加children属性
tree.forEach(item => {
item.children = arrayToTree(arr, item.id)
})
//返回树形结构
return tree
}
const res = arrayToTree(arr, '')
console.log(res);
2.不使用递归
//把平铺的数组结构转成树形结构
const arr = [
{ 'id': '29', 'pid': '', 'name': '总裁办' },
{ 'id': '2c', 'pid': '', 'name': '财务部' },
{ 'id': '2d', 'pid': '2c', 'name': '财务核算部' },
{ 'id': '2f', 'pid': '2c', 'name': '薪资管理部' },
{ 'id': 'd2', 'pid': '', 'name': '技术部' },
{ 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' }
]
export function tranListToTreeData(list) {
// 1. 定义两个中间变量
const tree = [],
map = {}
// 2. 通过id快速找到对应的元素,并给每个元素补充children属性
list.forEach(item => {
if (!item.children) {
item.children = []
}
map[item.id] = item
})
// 3. 循环处理每个元素
list.forEach(item => {
const parent = map[item.pid]
// 如果存在则表示item不是最顶层的数据
if (parent) {
parent.children.push(item)
} else {
// 如果不存在 则是顶层数据
tree.push(item)
}
})
return tree
}