编辑代码

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)