SOURCE

// 使用映射的方法
function arrayToTree(array) {
  let map = {}; // 存储id和节点的映射
  let root = null; // 根节点
  let rootId = null
  for (let item of array) {
    map[item.id] = item; // 将节点添加到映射中
    item.children = []; // 初始化子节点数组
    if (item.parentId === 0) { // 如果没有父节点,说明是根节点
      root = item;
      rootId = item.id
    }
  }
  for (let key in map) {
      if(key == rootId) continue;
     // 如果有父节点,找到父节点并将当前节点添加到其子节点数组中
      let parent = map[key].parentId;
      map[parent].children.push(map[key]);
  }
  return root;
}
let a = [
    
    {
        id:1,
        name:'1',
        parentId:7,
    },
    {
        id:2,
        name:'2',
        parentId:7,
    },
    {
        id:3,
        name:'3',
        parentId:2,
    },
    {
        id:4,
        name:'4',
        parentId:4,
    },
    {
        id:5,
        name:'5',
        parentId:3,
    },
    {
        id:7,
        name:'0',
        parentId:0,
    },
]
console.log(arrayToTree(a))
console 命令行工具 X clear

                    
>
console