如何把平铺数组转换为树形嵌套结构(非递归方式)

192 阅读1分钟

一.定义一个数组

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

}