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

如何按name键及多个子串过滤对象数组?

实现多子串匹配的数组过滤需求

你的核心问题是当前代码只做了完整query字符串的包含匹配,而需求是要让name同时包含query拆分后的每一个子串。要实现这个效果,可以按以下思路修改:

  1. 把输入的query按空格拆分成独立子串,同时处理多个连续空格的情况,过滤掉空串
  2. 对每个子串和对象的name统一转小写,避免大小写敏感问题
  3. 检查对象的name是否包含所有拆分后的子串

修改后的代码如下:

const filteredData = query
  ? totalItems?.filter((x: DBItemResponse) => {
      // 处理query:按空格拆分、转小写、过滤空串
      const querySegments = query.toLowerCase().split(/\s+/).filter(Boolean);
      // 如果拆分后没有有效子串,直接返回true(对应query全是空格的情况)
      if (querySegments.length === 0) return true;
      // 检查name是否包含所有子串
      const itemName = x?.name?.toLowerCase() || '';
      return querySegments.every(segment => itemName.includes(segment));
    })
  : totalItems;

代码说明:

  • split(/\s+/):用正则匹配任意数量的空格拆分,避免多个连续空格产生空串
  • filter(Boolean):彻底移除拆分后可能出现的空字符串(比如query开头/结尾有空格的情况)
  • every(segment => itemName.includes(segment)):确保name同时包含所有子串,符合你需要的"this name"同时匹配的需求
  • 额外处理了x?.name为空的情况,避免调用toLowerCase()报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:54:23