var zNodes = [
{ id: 1, name: 'SeriousLose Home', pid: 0 },
{ id: 2, name: 'SeriousLose in Google', pid: 0 },
{ id: 3, name: 'SeriousLose in ShangHai', pid: 1 },
];
function buildTree(arr) {
let temp = {};
let tree = {};
arr.forEach((item) => {
temp[item.id] = item;
});
let tempKeys = Object.keys(temp);
tempKeys.forEach((key) => {
let item = temp[key];
let _itemPId = item.pid;
let parentItemByPid = temp[_itemPId];
if (parentItemByPid) {
if (!parentItemByPid.children) {
parentItemByPid.children = [];
}
parentItemByPid.children.push(item);
} else {
tree[item.id] = item;
}
});
return Object.keys(tree).map((key) => tree[key]);
}
let treeAry = buildTree(zNodes);
console.log(treeAry);
const list = [
{ id: 1, name: '一级 1', pid: 0 },
{ id: 2, name: '二级 1-1', pid: 1 },
{ id: 3, name: '二级 1-2', pid: 1 },
{ id: 4, name: '三级 1-1-1', pid: 2 },
{ id: 5, name: '一级 2', pid: 0 },
];
function listToTree(list) {
return list.filter((e) => {
let pid = e.pid;
let newArr = list.filter((ele) => {
if (ele.id == pid) {
if (!ele.children) {
ele.children = [];
}
ele.children.push(e);
return true;
}
});
return newArr.length === 0;
});
}
listToTree(list);