let arr = [
{ id: 'a', uid: '' },
{ id: 'b', uid: 'a' },
{ id: 'c', uid: 'a' },
{ id: 'd', uid: 'c' },
{ id: 'f', uid: 'g' },
]
function toTree (data) {
// 删除 所有 children,以防止多次调用
data.forEach(function (item) {
delete item.children;
});
// 将数据存储为 以 id 为 KEY 的 map 索引数据列
var map = {};
data.forEach((item) => map[item.id] = item);
var res = [];
data.map((item) => {
// 以当前遍历项,的pid,去map对象中找到索引的id
var parent = map[item.uid];
// 好绕啊,如果找到索引,那么说明此项不在顶级当中,那么需要把此项添加到,他对应的父级中
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
//如果没有在map中找到对应的索引ID,那么直接把 当前的item添加到 res结果集中,作为顶级
res.push(item);
}
});
return res;
}
// toTree(arr)
console.log(JSON.stringify(toTree(arr)));
网友评论