m0_60877809 2022-10-24 15:14 采纳率: 72.7%
浏览 40
已结题

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:[]
                            }
                        ]
                    }
                ]
  • 写回答

2条回答 默认 最新

  • wan8140870 2022-10-24 17:51
    关注
    
    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))
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月24日
  • 已采纳回答 10月24日
  • 创建了问题 10月24日

悬赏问题

  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改