多属性不区分大小写模糊过滤对象数组的最优方法
不区分大小写过滤对象数组的多属性匹配方案
我来帮你把这个过滤逻辑补全并优化,刚好能满足你要的不区分大小写、匹配多个属性的需求!
基础实现方案
先给你补全并优化后的完整代码,直接就能用:
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
相关产品推荐
相关产品推荐

