实现的步骤,先把最外层的拿到res数组里面(也就是parentId为0)作为第一层,将其转化为map,遍历每一个对象的prentId=id,将其item项push到id一样的children数组里面,实现树形结构
let list = [{
id: 1,
name: '部门A',
parentId: 0
},
{
id: 2,
name: '部门B',
parentId: 0
},
{
id: 3,
name: '部门C',
parentId: 1
},
{
id: 4,
name: '部门D',
parentId: 1
},
{
id: 5,
name: '部门E',
parentId: 2
},
{
id: 6,
name: '部门F',
parentId: 3
},
{
id: 7,
name: '部门G',
parentId: 2
},
{
id: 8,
name: '部门H',
parentId: 4
}];
// 时间复杂度O(n)
function convert(list) {
const res = []
// console.log(list,'list');
// 将数组转换成对象
const map = list.reduce((res, v) = >(res[v.id] = v, res), {}) console.log(map, 'map');
for (const item of list) {
// console.log(item);
// 将parentId=0的先push进res数组里面
if (item.parentId === 0) {
res.push(item) continue
}
//筛选出其他的parentId,1,2,3,4,
if (item.parentId in map) {
console.log(item.parentId, '父id')
// 拿到id与parentId相等的
const parent = map[item.parentId] console.log(map[item.parentId])
// 将parentId这一项(item)添加到id一样的里面children,如果没有就给空数组
parent.children = parent.children || [] parent.children.push(item)
}
}
return res
}
const result = convert(list) console.log(result);