有趣且重要的JS知识合集(9)数组转化为树形结构

本文介绍了一种非递归方法来构建前端路由菜单。后端提供数组形式的路由数据,通过id和pid连接一级和二级路由。利用Map存储数据并遍历,将子菜单添加到对应的父菜单中,最终形成树形结构。这种方法避免了递归,提高了效率。
摘要由CSDN通过智能技术生成

一般用在管理系统时,路由菜单的封装,后端一般将要渲染的路由菜单通过数组的形式,返回给前端,然后一级二级路由是通过中间的id,pid来联结的,一级路由的id就是二级路由的pid,代码如下:(递归的方式我不赞成用,就只用非递归就行啦~)

function arrToTree(data) {
  let result = []
  let map = new Map()
  data.forEach(item => {
    // 存入字典集里
    map.set(item.id, item)
  })
  data.forEach(item => {
    // 判断字典集里是否有该键
    let parent = map.get(item.pid)
    if (parent) {
      // ?. 可选链操作符,常用于判断对象里是否有该属性
      // ?? 合并操作符 或等于||,但是不会对左边值进行处理
      (parent?.children??(parent.children = [])).push(item)
    } else {
      result.push(item)
    }
  })
  return result
}

// let data =[
//   {id:1,name:'部门0',pid:0},
//   {id:2,name:'部门1',pid:0},
//   {id:3,name:'部门2',pid:1},
//   {id:4,name:'部门3',pid:1},
//   {id:5,name:'部门4',pid:2},
//   {id:6,name:'部门5',pid:2},
//   {id:7,name:'部门6',pid:3},
//   {id:8,name:'部门7',pid:4}
// ]

// 调用方式
arrToTree(data)

结果截图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值