面试的时候遇到手写的,现场就懵逼了,回来看来别人写的,记录一下。
实现方法:
const arr = [
{ id: 12, pid: 1, name: "分公司1" },
{ id: 1, pid: 0, name: "总公司" },
{ id: 121, pid: 12, name: "分公司1-1" },
{ id: 131, pid: 13, name: "分公司2-1" },
{ id: 133, pid: 13, name: "分公司2-3" },
{ id: 122, pid: 12, name: "分公司1-2" },
{ id: 13, pid: 1, name: "分公司2" },
{ id: 132, pid: 13, name: "分公司2-2" },
{ id: 123, pid: 12, name: "分公司1-3" },
{ id: 1231, pid: 123, name: "小分公司1122333" },
];
function tree(data) {
// 1.删除所有的children
data.forEach(element => {
delete element.children;
});
// 2.将数据存储为以id为key值的map索引
var map = {};
data.forEach((e) => {
map[e.id] = e;
})
console.log(map);
// 3.设置一个存储空间
var list = [];
data.forEach((item) => {
var parent = map[item.pid];
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
list.push(item)
}
});
return list
}
console.log(tree(arr));