[前端面试题_上机] 请用递归封装「扁平数组」转「树形结构」的方法

94 阅读1分钟

扁平数组如下图:

snipaste20220403_195923.jpg

希望得到的树形结构效果图如下:

snipaste20220403_200436.jpg

具体代码落地

//定义这个封装函数
function toDo(arr,pid = '') {
  //定义一个最后得到处理之后的属性数据数组,取名为 newarr
  const newarr=[]

  //循环遍历我们要操作的数据,先找到第一层,第一层是pid为空的这一项
  arr.forEach(item => {
    //筛选第一层
    if(item.pid === pid) {
      //筛选不是第一层的,不是第一层的特征是-->传入的id等于原本数据的pid
      const child = toDo(arr, item.id)
      if(child.length){
        item.children = child
      }
      newarr.push(item)
    }
  })
  return newarr
}
//调用函数
console.dir(toDo(arr))