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

JavaScript:如何优雅实现对象数组的多值字符串匹配过滤?

更优雅的对象数组全局搜索实现方案

这里提供一个更简洁、可读性更强的实现,利用数组高阶函数替代嵌套循环,逻辑更直观:

const searchAllObject = (data, query) => {
  // 统一转小写,避免重复转换,提升效率
  const lowerCaseQuery = query.toLowerCase();
  // 筛选符合条件的对象
  return data.filter(obj => 
    // 判断对象的任意值是否包含搜索关键词
    Object.values(obj).some(value => 
      value.toLowerCase().includes(lowerCaseQuery)
    )
  );
};

实现说明:

  • 统一小写转换:提前将搜索关键词转成小写,避免在每次值匹配时重复转换,提升性能
  • Array.filter():直接对原数组进行筛选,自动生成符合条件的结果数组,替代手动维护subsetData数组的逻辑
  • Object.values() + Array.some():获取对象的所有值后,用some()判断是否存在任意一个值匹配关键词,替代原代码中嵌套循环+reduce的判断逻辑,逻辑更直白

对比原实现的优势:

  • 代码行数减少近一半,结构更紧凑
  • 避免了多个临时数组(singleObject、indexedObjects)的维护,减少出错概率
  • 函数式编程风格,逻辑更清晰,可读性和可维护性更强

验证示例:

使用你提供的测试数组:

const data = [
  {name: "Jordan", age: "forty two"},
  {name: "Maya", age: "thirty"}
];
  • 搜索'j':searchAllObject(data, 'j') → 返回 [{name: "Jordan", age: "forty two"}]
  • 搜索'm':searchAllObject(data, 'm') → 返回 [{name: "Maya", age: "thirty"}]
  • 搜索'y':searchAllObject(data, 'y') → 返回包含两个对象的数组(Jordan的name含'y',Maya的name也含'y')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:52:42