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

JavaScript根据标签数组过滤对象数组并匹配属性子字符串的实现问题

问题排查

你现有代码不符合预期的核心原因有2点:

  • 你调用的是Array.includes(),该方法判断的是「对象的某个属性值完全等于搜索标签」,而非「属性值字符串包含搜索标签子串」
  • 未处理大小写匹配问题,容易出现大小写不一致导致匹配失败的情况
正则实现方案

实现前需要先对搜索标签里的正则特殊字符做转义,避免标签包含.、*等特殊字符时匹配逻辑异常,完整代码如下:

// 正则特殊字符转义工具函数
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

// 过滤逻辑
const filteredResult = arrayOfObjects.filter(object => {
  // 要求所有搜索标签都匹配命中
  return searchTags.every(tag => {
    // 生成不区分大小写的子串匹配正则,不需要忽略大小写可以去掉i参数
    const matchReg = new RegExp(escapeRegExp(tag), 'i');
    // 要求对象至少有一个属性值包含当前标签子串
    return Object.values(object).some(value => {
      // 非字符串类型属性值先转为字符串再匹配
      return matchReg.test(String(value));
    })
  })
})

用你提供的测试数据运行以上代码,会正确返回第一个符合要求的对象。

更轻量的非正则实现

如果没有复杂的匹配规则需求,用String.includes()实现性能更高,也不需要处理正则转义:

const filteredResult = arrayOfObjects.filter(object => {
  return searchTags.every(tag => {
    const lowerCaseTag = tag.toLowerCase();
    return Object.values(object).some(value => {
      return String(value).toLowerCase().includes(lowerCaseTag);
    })
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:12:03