树结构的数据筛选方法

//处理前数据

    deptTree: [

        {

          dwdm: '5000000',

          dwjc: '交警大队',

          children: [

            {

              dwdm: '"5000100"',

              dwjc: '一大队'

            },

            {

              dwdm: '"5000200"',

              dwjc: '二大队'

            }

          ]

        },

       {

          dwdm: '5006000',

          dwjc: '交警二支队'

        }

      ],

 treeDwdmArr: [

        '5000000',

        '5000100'

],

dwdmString:‘5000100’

1、过滤出某条数据

    filterDeptTree(tree) {

      let res = null

      for (let i = 0; i < tree.length; i++) {

        if (this.dwdmString === (tree[i].dwdm)) {

          res = tree[i]

          break

        } else if (tree[i].children && tree[i].children.length) {

          const childRes = this.filterDeptTree(tree[i].children)

          if (childRes) {

            res = childRes

            break

          }

        }

      }

      return res

    },

2、过滤出不满条件的数据--结果为树结构

 //方法核心

    filterDeptTree(treeArr) {

      const newArr = []

      treeArr.forEach(ele => {

        if (this.treeDwdmArr.includes(ele.dwdm)) {

          newArr.push(ele)

          if (ele.children && ele.children.length) {

            this.filterDeptTree(ele.children)

          }

        }

      })

      newArr.forEach(ele => {

        treeArr.push(ele)

      })

      for (let i = 0; i < treeArr.length; i++) {

        treeArr.shift()

      }

    },

 处理前:

处理后:

3、模糊查询时过滤数据

    // 过滤节点

    filterNode(value, data, node) {

      if (!value) return true

      return this.filterNodeAndParent(value, data, node)

    },

    // 递归检测父元素或自己是否符合条件-只能查找子节点

    filterNodeAndParent(value, data, node) {

      if (node.level === 1) {

        return node.data.name.indexOf(value) !== -1

      } else if (data.level !== 1) {

        // 判断自己是否符合条件

        if (node.data.name.indexOf(value) !== -1) {

          return true

        } else { // 否则查找父级

          return this.filterNodeAndParent(value, node.data, node.parent)

        }

      }

    },

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值