let arr = [
{id: 1, name: '1', pid: 0},
{id: 2, name: '2', pid: 1},
{id: 3, name: '3', pid: 1},
{id: 4, name: '4', pid: 3},
{id: 5, name: '5', pid: 3},
]
let tree = [
{
"id": 1,
"name": "1",
"pid": 0,
"children": [
{
"id": 2,
"name": "2",
"pid": 1,
"children": []
},
{
"id": 3,
"name": "3",
"pid": 1,
"children": [
{
"id": 4,
"name": "4",
"pid": 3,
"children": []
}
]
}
]
}
]
function arrayToTree(items) {
let res = [] // 存放结果集
let map = new Map()
// 先转成map存储
for (const i of items) {
map.set(i.id,{ ...i, children: [] })
}
for (const i of items) {
const newItem = map.get(i.id)
if (i.pid === 0) {
res.push(newItem)
}else{
map.get(i.pid).children.push(newItem)
}
}
return res
}
function treeToArray(tree) {
let res = []
for (const item of tree) {
const { children, ...i } = item
res.push(i)
if (children && children.length) {
res = res.concat(treeToArray(children))
}
}
return res
}
arrayToTree(arr)
treeToArray(tree)