扁平化和逆扁平化

135 阅读1分钟
const arr2 = [1, [2, [3, 4]]];
console.log(arr2.flat(Infinity));

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 },
]

const getTree = (array) => {
  const treeList = []
  const map = {}

  array.forEach(item => {
    if (!item.children) {
      item.children = []
    }
    map[item.id] = item
  });

  array.forEach(item => {
    // 对于每一个元素来说,先找它的上级
    // 因为map中的对象键值名是以id为值的  所以如果当map的键值名===pid说明他是上级(如果她存在) 反之则是最顶级
    let parent = map[item.pid]
    if (parent) {
      parent.children.push(item)
    } else {
      treeList.push(item)
    }
  })
  console.log(treeList);
  return treeList
}

getTree(arr)