JS递归过滤树形结构数组对象-模糊查询

前言

今天实际项目有个需求,需要由前端来实现简单树形数据的模糊搜索功能,需求是这样的,简单描述下需求内容:

1、父节点含有,将父节点返回(包含所有子节点)

2、父节点没有,但子节点含有,父节点仍要返回,而子节点只返回包含的搜索内容的、

思来想去,最后用了递归 + includes模糊查询 的方式来实现的。特地记录一下

代码实现

js 复制代码
  const filterTree = (tree, val) => {
    let result = []
    tree.forEach(item => {
      if (item.children && item.children.length) {
        let children = filterTree(item.children, val)
        let obj = {
          ...item,
          children
        }
        if (children && children.length) {
          result.push(obj)
        } else if (item.title.includes(val)) {
          result.push({ ...item })
        }
      } else {
        if (item.title.includes(val)) {
          result.push(item)
        }
      }
    })
    return result
  }

测试

js 复制代码
let arr = [
	{
	    title: '你吗?',
	    children: [
	        {
	            title: '很好啊',
	            children: []
	        },
	        {
	            title: '吗',
	            children: [
	                {
	                    title: '好呀',
	                    children: []
	                }
	            ]
	        }
	    ]
	},
	{
	    title: '卡卡卡',
	    children: [
	        {
	            title: '非常好芬',
	            children: []
	        }
	    ]
	},
	{
	    title: '好卡',
	    children: [
	        {
	            title: '非常芬',
	            children: []
	        }
	    ]
	},
	{
	    title: '第三方的好',
	    children: []
	},
	{
	    title: '第三方的',
	    children: [
	        {
	            title: '的',
	            children: [] 
	        }
	    ]
	}
]

filterTree(arr, '好');

运行结果:

相关推荐
竹林81826 分钟前
用 wagmi v2 和 viem 手写 NFT 市场批量上架功能,我踩遍了所有异步坑
javascript
ayqy贾杰31 分钟前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox31 分钟前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全
zithern_juejin36 分钟前
数组扁平化
javascript
清溪54941 分钟前
n8n表达式沙箱逃逸至RCE漏洞-CVE-2025-68613复现
javascript·安全
miaowmiaow42 分钟前
PSD2Code 近期更新与深度解析:从设计稿到生产级代码的完整技术栈
前端·人工智能·ai编程
Hilaku1 小时前
多标签页并发请求导致 Token 刷新失败?只有 15行代码就能解决 !
前端·javascript·程序员
烛衔溟1 小时前
TypeScript 类的静态成员与静态方法
开发语言·javascript·typescript
Nile1 小时前
解密Palantir系列一:4. Ontology 不是哲学
开发语言·前端·javascript
Highcharts1 小时前
如何创建蛛网地图|气泡事件+全球发布+关联组合图表开发示例
javascript