【仅记录】前端-自写类似树结构数据的模糊查询

一、类似树结构数据的模糊查询:

需求:根据输入的文字对数据进行模糊查询

1、类似对象树的数据如下:

let listData = [
    {    headerlist:{
            tools:[
                {name:'赵',age:20},
                {name:'钱',age:15},
                {name:'孙',age:12},
            ],
            update:[
                {name:'李',age:16},
                {name:'周',age:22},
                {name:'吴',age:32},
            ],
        },    
    },
    {    leftlist:{
            tools:[
                {...}
            ],
            update:[
                {...}
            ],
        },
    {,
    {    rightlist:{
            [......]
        }
    }
]

2、具体代码:

方法调用的vue页面:

<script setup lang="ts">   

     import { objectHaveArrSearch } from './searchTree.js'

    /**
     * 顶部查询
     */
    const handleSearch = () => {
        const searchObj = objectHaveArrSearch(selectname,searchinput,treeData)
        console.log(searchObj,' --searchObj')
    }

</script>

js文件查询公共方法:

(这里其实就是确定了这个类似树结构的层数,否则不能按照底下的这种写)

 export function objectHaveArrSearch(select,value,tree) {
      let newarr = []
      tree.filter(item => {
        let newarr1 = {}
        let newarr2 = {}
        for(const key in item) {
          for(const key1 in item[key]) {
            let a = []
            if(item[key][key1].length>0) {
              item[key][key1].filter(item1 => {
                if(item1.name.indexOf(value) > -1){    // 判断name中是否含有查询的内容
                  a.push(item1)
                }
              })
            }
            newarr2[key1] = a
          }
          newarr1[key] = newarr2
        }
        newarr.push(newarr1)
      })
      return newarr
  }

二、普通树查询:

1、方法调用:

gData = mapTree(searchValue, data)

2、js文件中写入:

/**
 * 组织筛选树
 * @param value 筛选纸
 * @param arr 树
 * @returns
 */
export function mapTree(value, arr) {
  let newarr = []
  arr.forEach((element) => {
    if (element.title.indexOf(value) > -1) {
      // 判断条件
      newarr.push(element)
    } else {
      if (element.children && element.children.length > 0) {
        let redata = mapTree(value, element.children)
        if (redata && redata.length > 0) {
          let obj = {
            ...element,
            children: redata,
          }
          newarr.push(obj)
        }
      }
    }
  })
  return newarr
}

本次也只做记录,记录一下模糊查询的方法,其他的步骤会根据不同的数据进行变化,因为目前项目数据的层数已知,所以可以这么写。目前这个方法能复用的概率不太大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值