一.定义一个数组
list=[
{ '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研发部'}
]
1.1如果说pid相当于parent id 说明pid是id父
1.2得出总裁办,财务部,技术部是一级部门,财务,核算部,薪资管理部,Java研发部是二级部门
二.思路分析
2.1定义一个对象map:{ },映射数组为key:value方式,并且添加一个chalidren数组,
2.2比如第一项总裁办映射为key:value
{ 'id': '29', 'pid': '','name': '总裁办'} => map:{ '29':{'id': '29', 'pid': '', 'name': '总裁办'},childre:[]}
2.3定义一个数组treeList:[ ],
2.4如果pid为空,它就是一级部门,直接添加到treeList, 如果pid有值,就找id为相同值,并且添加到chlidren里面
三.代码实现
let map = {}
let treeList = []
list.forEach(item=>{
item.children = []
map[item.id] = item})
list.forEach(item=>{
const pid = item.id ===》这一步相当于把item里面pid赋值给pid
const obj = map[ pid ] ===>这行代码表示让obj 等于 map对象里面key和item pid 相等值
如果obj存在就把此项item加到children里面,如果obj不存在就是一级对象,直接加到treeList里面然后返回这个对象treeList
if(obj){
obj.children.push(item)}
else{
treeList.push(item)}
return treeList
}