递归函数写菜单和权限

场景:

1、返回的菜单数据,有些不需要且有些数据为null时会产生一些bug;

2、需求不明确是几层菜单,保持代码的健壮性,保证后期突然需求变动,不用大量修改代码;

3、层级很深的按钮级别,并且处于不同的层级

解决方法:

递归函数,保证代码的健壮性。可先实现功能,后期优化。

以上三种场景,其实是一个功能模块所需要的

下面显示主要代码:

第一种,直接返回原结构数据,排除为空为null的字段

function recursiveDeleteMenuRenderFalse(data:any){
  data.forEach((items:any) => {
    if(!items.menuRender){
      delete items.menuRender
    }
    for(const i in items){
      // 优化判断  !items[i] || items[i] === undefined
      if( items[i]==="" || items[i] === null || items[i]=== 'null' || items[i]=== undefined){
        delete items[i]
    }
    if(items.routes?.length > 0){
      recursiveDeleteMenuRenderFalse(items.routes)
    }
  });
  return data;
}

第二种:需要拿取某一层级下的数组,层级不确定,返回的是一个数组,不是原数据

export function buttonPermission(data: any, pathname: any) {
  let flag = true;
  let button: string[] = [];
  function loop(data:any,pathname:any){
    if(flag){
      data?.forEach((items: any) => {
        if (items.path === pathname) {
          items.routes?.map((items: any) => {
            button.push(items.name);
          });
          flag = false;
        }
        if (items.routes?.length > 0) {
          loop(items.routes, pathname);
        }
      });
    }
    return false
  }
  loop(data,pathname)
  return button
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值