function treeify(arr) {
const res = []
const children = new Map()
const stack = []
arr.forEach((item) => {
if (!item.pid) {
res.push(item)
item.children = []
} else {
_children = children.get(item.pid) || []
children.set(item.pid, _children.concat(item))
}
})
res.forEach((item) => {
//把所有孩子压入栈中
children.get(item.id).map((child) => {
stack.push(child)
item.children.push(child)
})
//将所有孩子依次出栈,如果有孩子,则把它们的孩子压栈。重复上述操作,直至栈空。
while (stack.length != 0) {
const child = stack.pop()
let _children = []
if ((_children = children.get(child.id))) {
_children.map((c) => {
child.children = child.children || []
child.children.push(c)
stack.push()
})
}
}
})
return res
}
树形化数据
于 2023-10-18 09:37:31 首次发布