一、题目描述
实现 convert 方法,把原始 list 转换成树形结构,要求尽可能降低时间复杂度
以下数据结构中,id 代表部门编号,name 是部门名称,parentId 是父部门编号,为 0 代表一级部门,
现在要求实现一个 convert 方法,把原始 list 转换成树形结构,parentId 为多少就挂载在该 id 的属性 children 数组下,结构如下:
// 原始list
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}
];
// 转换后的
let result = [
{
id: 1,
name: '部门A',
parentId: 0,
children: [
{
id: 3,
name: '部门C',
parentId: 1,
children: [
{
id: 6,
name: '部门F',
parentId: 3
}, {
id: 16,
name: '部门L',
parentId: 3
}
]
},
{
id: 4,
name: '部门D',
parentId: 1,
children: [
{
id: 8,
name: '部门H',
parentId: 4
}
]
}
]
},
...
];
// 实现
const convert = (list) => {
}
二、思路分析
- 如果
parentId为0,那么就之间push - 定义了一个
map对象,来存储每个元素,目的是为了可以找到父级
三、代码答案
const convert = (list) => {
const result = []
const map = {}
list.forEach(item => {
map[item.id] = item
item.children = []
if (item.parentId === 0) {
result.push(item)
} else {
const parent = map[item.parentId]
parent.children.push(item)
}
});
return result
}
希望可以告知更多的方法~欢迎评论