查看菜单数据过滤

新优化来的触不及防
要求:点击查看,菜单页面过滤,只展示operate为true的数据
难点在于:数据的每一层都有operate, 但是 只判断最后一层operate是否为true, 否则过滤掉整个item以级对应的父级
解决方法:
拿到整棵树,遍历数组,拿到children,继续遍历,拿到第二层的subArr

 filterByOperateZero(data) {
      let filteredData = []
      for (let i = 0; i < data.length; i++) {
        let children = data[i].children
        let secondMenu = []
        if (children && children.length) {
          for (let j = 0; j < children.length; j++) {
            let subArr = children[j].children
            let isOpetare = this.validSub(subArr) || children[j].operate
            if (isOpetare) {
              secondMenu.push(children[j])
            }
          }
        }
        if (secondMenu.length) {
          data[i].children = secondMenu
          filteredData.push(data[i])
        }
      }
      return filteredData
    },

重点来了,由于要过滤掉operate为true的数据和父级, 需要将children[j]赋值给新数组secondMenu,当新数组有值,那么新数组赋值给数组data[i].children, 改的就是children,

validSub(subArr) {
      return subArr.some(item => item.operate)
    },

这句是精髓,判断children[j].children的operate是否为true,或者children本身是否为true,是就筛选出来

let isOpetare = this.validSub(subArr) || children[j].operate

js拆解数组扛大旗!
总结: 先递归替换最深层的children,再替换第二层的children

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值