SOURCE

function list2Tree(list) {
    let uni = new Map();
    list.forEach(item => {
        if (item.pid == 0) {
            if (uni.has(item.id)) {
                let node = uni.get(item.id)
                let trimedObj = Object.assign(node, ObjThin(item))
                uni.set(item.id, trimedObj)
            } else {
                let trimedObj = Object.assign({}, ObjThin(item), { 'children': [] })
                uni.set(item.id, trimedObj)
            }

        } else {
            if (uni.has(item.pid)) {
                let parentNode = uni.get(item.pid)
                parentNode.children.push(ObjThin(item))
                uni.set(parentNode.id, parentNode);
            } else {
                let parentNode = {
                    "children": [ObjThin(item)]
                }
                uni.set(item.pid, parentNode)
            }
        }
    })
    let treeList = Array.from(uni).map(v => v[1])

    return treeList
}

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: 4 },
    { id: 6, name: '部门1-3-4-5', pid: 5 },
]
let arr2 = arr.reverse()


function toTree(arr){
    let result = []
    let map = {};
    arr.forEach(item=>{
        let id = item.id
        let pid = item.pid

        if(!map[id]){
            map[id] = {children:[]}
        }

        map[id] = {
            ...item,
            children: map[id].children
        }
        let treeItem = map[id];
        if(pid==0){
            result.push(treeItem)
        } else {
            if(!map[pid]){
                map[pid] = {
                    children:[]
                }
            }
            item[pid].children.push(treeItem)
        }

        
    })
    return result
}
function arrayToTree(items) {
  const result = [];   // 存放结果集
  const itemMap = {};  // 
  for (const item of items) {
    const id = item.id;
    const pid = item.pid;

    if (!itemMap[id]) {
      itemMap[id] = {
        children: [],
      }
    }

    itemMap[id] = {
      ...item,
      children: itemMap[id]['children']
    }

    const treeItem =  itemMap[id];

    if (pid === 0) {
      result.push(treeItem);
    } else {
      if (!itemMap[pid]) {
        itemMap[pid] = {
          children: [],
        }
      }
      itemMap[pid].children.push(treeItem)
    }

  }
  return result;
}


console.log(arrayToTree(arr))
// console.log(toTree(arr))

// [{"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":[{"id":5,"name":"部门5","pid":4,"children":[{"id":6,"name":"部门1-3-4-5","pid":5,"children":[]}]}]}]}]}]



//2022-03-20
function arrayToTree0320(arr){
    let result = [];
    let map = {};
    arr.forEach(item=>{
        let id = item.id;
        let pid = item.pid;

        if(!map[id]){
            map[id] = {
                children:[]
            };
        }
        map[id] = {
            ...item,
            children: map[id].children
        };
        
        let treeNode = map[id];
        if(pid===0){
            result.push(treeNode)
        } else {
            if(!map[pid]){
                map[pid] = {
                    children:[]
                }
            }
            map[pid].children.push(treeNode)
        }

    })
    return result
}

console.log(_.eq(arrayToTree(arr),arrayToTree0320(arr)))
// console.log(arrayToTree0320(arr))

console.log('iso',_.isObject(new String('')))

console.log(_.isEmpty(''))
console.log(_.isEmpty(undefined))
console.log(_.isEmpty(null))
console 命令行工具 X clear

                    
>
console