You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript嵌套数组内对象数据最佳过滤方法 按Framework筛选适配搜索框

嵌套结构数据过滤实现方案

针对嵌套数组的匹配需求,完全可以在原有单层filter逻辑的基础上扩展,不需要引入额外复杂依赖,核心是在遍历每个用户对象时,同步判断内嵌projects数组的匹配情况。

核心实现逻辑

分两种常见的需求场景,可根据实际业务需要选择对应的实现:

  • 项目级精准过滤:只返回和搜索关键词匹配的项目条目,自动剔除无关内容
  • 用户级粗过滤:只要用户名下存在匹配的项目,就返回该用户的全量项目列表

项目级精准过滤实现

这种场景下,搜索结果不会夹带无关的项目内容,匹配精度更高:

const filterByKeyword = (rawData, searchKeyword) => {
  // 统一转小写处理,避免大小写差异导致匹配失效
  const keyword = searchKeyword.trim().toLowerCase();
  // 搜索词为空时直接返回全量原始数据
  if (!keyword) return rawData;

  return rawData.map(user => {
    // 判断当前用户名是否匹配关键词
    const isUserNameMatch = user.name.toLowerCase().includes(keyword);
    
    // 用户名匹配时直接保留用户全部项目;否则筛出符合关键词的项目
    const filteredProjects = isUserNameMatch 
      ? user.projects
      : user.projects.filter(project => {
          return (
            project.ProjectName.toLowerCase().includes(keyword) ||
            project.Framework.toLowerCase().includes(keyword)
          )
        })

    return {
      name: user.name,
      projects: filteredProjects
    }
  }).filter(matchedUser => {
    // 保留符合要求的用户:用户名本身匹配,或名下存在至少一个匹配的项目
    const hasMatchedProject = matchedUser.projects.length > 0;
    return matchedUser.name.toLowerCase().includes(keyword) || hasMatchedProject;
  })
}

实际调用效果

比如搜索框输入react,调用filterByKeyword(data, 'react')会得到如下结果:

[
  {
    name: 'John Doe',
    projects: [
      { ProjectName: 'something', Framework: 'React' },
      { ProjectName: 'something', Framework: 'React Native' }
    ]
  }
]

Jane Doe的所有项目都不包含react关键词,因此会被整体排除。


用户级粗过滤实现

如果不需要剔除不匹配的项目条目,只要用户名下存在和关键词匹配的内容,就返回该用户和他的全部项目列表,可以用更轻量的some方法实现:

const simpleFilterByKeyword = (rawData, searchKeyword) => {
  const keyword = searchKeyword.trim().toLowerCase();
  if (!keyword) return rawData;

  return rawData.filter(user => {
    return (
      // 用户名匹配
      user.name.toLowerCase().includes(keyword) ||
      // 任意项目的项目名/Framework匹配
      user.projects.some(project => 
        project.ProjectName.toLowerCase().includes(keyword) ||
        project.Framework.toLowerCase().includes(keyword)
      )
    )
  })
}

搜索框接入方式

把上述过滤函数和搜索框的输入事件绑定即可:

  • 监听搜索框的onChange事件,实时获取输入框的当前值
  • 把原始数据和输入值传入过滤函数,拿到返回结果渲染到页面上

内容的提问来源于stack exchange,提问作者Adnomination

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 11:54:07