js关于树形数据的处理

关于前端树形数据结构的处理 需要吧上面的数据处理成下面的数据

          let arr = [
                  {id:'1',name:'一级',childrenList:[
                      {id:'2',name:'二级',childrenList:[
                          {id:'3',name:'三级',childrenList:[]},
                      ]}
                  ]},
                  {id:'1',name:'一级',childrenList:[
                      {id:'2',name:'二级',childrenList:[
                          {id:'4',name:'三级2-22',childrenList:[]},
                      ]}
                  ]},
                  {id:'1',name:'一级',childrenList:[
                      {id:'5',name:'二级-2',childrenList:[
                          {id:'6',name:'二级2-22',childrenList:[]},
                      ]}
                  ]},
                  {id:'1',name:'一级',childrenList:[
                      {id:'7',name:'二级-3',childrenList:[]}
                  ]},
                ]

                let arr1 = [
                    {
                        id:'1',
                        name:'一级',
                        childrenList:[
                            {
                                id:'2',name:'二级',childrenList:[
                                    {
                                        id:'3',name:'三级',childrenList:[]
                                    },
                                    {
                                        id:'4',name:'三级2-22',childrenList:[]
                                    }
                                ]
                            },
                            {
                                id:'5',name:'二级-2',childrenList:[
                                {id:'6',name:'二级2-22',childrenList:[]},
                                ]
                            },
                            {
                                id:'5',name:'二级-3',childrenList:[]
                            }
                        ]
                    }
                ]

function walkList(list) {
  let parentIdMap = {}

  function walk(arr, parentId = -1) {
    arr.map(item => {
      let { id, childrenList, ...rest } = item

      parentIdMap[parentId] = parentIdMap[parentId] || {}

      Object.assign(parentIdMap[parentId], {
        [id]: {
          id,
          ...rest
        }
      })

      walk(childrenList, id)
    })
  }

  walk(list)

  return parentIdMap
}

function transform2List(parentIdMap) {
  let outer = parentIdMap['-1']
  let list = []

  Object.values(outer).map(item => {
    list.push({
      ...item,
      childrenList: getChildren(item.id, parentIdMap)
    })
  })

  function getChildren(id, map) {
    if (!map[id]) {
      return []
    }
    return Object.values(map[id]).map(item => {
      return {
        ...item,
        childrenList: getChildren(item.id, map)
      }
    })
  }

  return list
}

transform2List(walkList(arr))

这样的数据是不行的,要加一个pid。pid 是 父级的id 。只有id没法转换。先转成一维数组,再转成树形结构