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

Typescript对象数组多条件过滤问题:multiFilter函数不生效

解决多条件数组过滤不生效的问题

看起来你的核心需求是同时匹配多个过滤条件:既要name包含filters.name里的任意关键词,又要city属于filters.city里指定的城市。问题大概率出在你自定义的multiFilter函数逻辑上——比如可能做了完全匹配而非部分匹配,或者没有正确处理多条件的“与”关系。

下面是一个经过验证的实现方案,直接替换你的multiFilter函数即可:

function multiFilter(items, filters) {
  // 遍历所有待过滤的项
  return items.filter(item => {
    // 遍历所有过滤条件,确保每一个条件都满足
    return Object.entries(filters).every(([key, allowedValues]) => {
      if (key === 'name') {
        // 针对name字段:检查item的name是否包含allowedValues中的任意一个字符串
        return allowedValues.some(value => item[key].includes(value));
      } else {
        // 针对其他字段(比如city):检查item的字段值是否在允许的数组里
        return allowedValues.includes(item[key]);
      }
    });
  });
}

// 你的原始数据
let filters = { name: ["Krishna", "Naveen"], city : ["London"] };
let results = [
 { "name": "Krishna#Surname", "city": "London", "age": 23 },
 { "name": "Naveen#Surname", "city": "London", "age": 23 },
 { "name": "Krishna#Surname", "city": "NewYork", "age": 23 },
 { "name": "Praveen#Surname", "city": "Washington", "age": 23 }
];

// 调用过滤函数
const filteredResults = multiFilter(results, filters);
console.log(filteredResults);

代码逻辑说明:

  • Object.entries(filters).every(...):确保所有过滤条件都必须满足(逻辑“与”),比如必须同时符合name和city的要求。
  • name字段的特殊处理:因为你的results里的name是带后缀的(比如Krishna#Surname),所以用includes()做部分匹配,而不是严格相等。
  • 其他字段的通用处理:比如city直接用includes()检查是否在允许的数组中,适合严格匹配的场景。

运行结果:

执行后会得到符合要求的前两条数据:

[
  { name: 'Krishna#Surname', city: 'London', age: 23 },
  { name: 'Naveen#Surname', city: 'London', age: 23 }
]

如果你的原始multiFilter函数是做了严格相等匹配(比如item[key] === value),那自然会过滤不到结果——因为Krishna#Surname和Krishna并不完全相等,这应该就是你之前代码不生效的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:43:41