扁平数组转tree,tree转id组成的二维数组
case: [
{ id: 1, level: 0, pid: 0 },
{ id: 4, level: 1, pid: 1 },
{ id: 5, level: 1, pid: 1 },
{ id: 7, level: 2, pid: 5 },
{ id: 2, level: 0, pid: 0 },
{ id: 6, level: 1, pid: 2 },
{ id: 3, level: 0, pid: 0 },
{ id: 8, level: 1, pid: 3 },
{ id: 9, level: 1, pid: 3 },
{ id: 10, level: 2, pid: 9 },
]
listToTree(list) {
var map = {}, node, tree= [], i;
for (i = 0; i < list.length; i ++) {
map[list[i].id] = list[i];
list[i].children = [];
}
for (i = 0; i < list.length; i += 1) {
node = list[i];
if (node.pid !== 0) {
map[node.pid].children.push(node);
} else {
tree.push(node);
}
}
return tree;
},
treeToArray(list) {
const arr = []
let temp = []
const flatten = (list, arr) => {
list.forEach(item => {
if (item.children === null || item.children.length === 0) {
arr.push(temp.concat([item.id]))
} else {
temp.push(item.id)
flatten(item.children, arr)
}
})
temp = []
return arr
}
flatten(list, arr)
return arr
},