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

多属性不区分大小写模糊过滤对象数组的最优方法

不区分大小写过滤对象数组的多属性匹配方案

我来帮你把这个过滤逻辑补全并优化,刚好能满足你要的不区分大小写、匹配多个属性的需求!

基础实现方案

先给你补全并优化后的完整代码,直接就能用:

const filterString = this.filterString.toLowerCase();
return myObjects.filter(entry => {
  // 将需要检查的属性统一转小写,避免重复转换
  const lowerId = entry.id.toLowerCase();
  const lowerName = entry.name.toLowerCase();
  const lowerShortName = entry.short_name.toLowerCase();
  
  // 只要任意一个属性包含过滤字符串,就保留该对象
  return lowerId.includes(filterString) || 
         lowerName.includes(filterString) || 
         lowerShortName.includes(filterString);
});

代码说明

  • 先把过滤字符串转成小写:只需要转换一次,比每次判断时转换更高效
  • 用includes()替代indexOf():includes()直接返回布尔值,代码可读性更强,不用再写indexOf() !== -1
  • 逻辑或(||)判断:只要对象的id/name/short_name任意一个属性(转小写后)包含过滤字符串,就会被保留下来,完全符合你说的0123、obj、mO01这类匹配场景

扩展性优化方案

如果以后需要检查更多属性,不想每次都修改过滤逻辑,可以用数组来管理要检查的属性,代码更灵活:

const filterString = this.filterString.toLowerCase();
// 定义需要检查的属性列表,新增属性直接加在这里就行
const targetProps = ['id', 'name', 'short_name'];

return myObjects.filter(entry => {
  // 使用Array.some()判断是否有任意一个属性符合条件
  return targetProps.some(prop => {
    return entry[prop].toLowerCase().includes(filterString);
  });
});

这个方案的好处是,后续要加description、category这类新属性,只需要在targetProps数组里追加就行,不用改动过滤的核心逻辑,维护起来更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:19:40