如何在JavaScript中基于另一数组过滤对象数组?
如何用过滤器数组匹配对象数组的所有条件
正确实现代码
const array = [ { id: 1, Country: "x", industry: "technology" }, { id: 2, Country: "y", industry: "Data alaysis" }, { id: 3, Country: "y", industry: "technology" }, ]; const filters = ["technology", "y"]; const keys = ["industry", "Country"]; const search = (array) => { return array.filter(item => { // 确保过滤器中的每一个值都能在对象的指定键中找到匹配 return filters.every(filter => { return keys.some(key => item[key] === filter); }); }); }; console.log(search(array)); // 输出 [{ id: 3, Country: "y", industry: "technology" }]
原代码问题分析
- 逻辑判断错误:你使用了
keys.some(...),这会导致只要对象有一个键满足条件就被保留,但需求是所有过滤值都必须匹配,因此需要用filters.every(...)来确保每个过滤条件都被满足。 includes用法错误:item[key].includes(filters)是把整个过滤器数组作为匹配目标,这不符合逻辑。正确的做法是检查单个过滤值是否存在于对象的指定键值中,即item[key] === filter(精确匹配)。
可选:支持模糊匹配
如果需要模糊匹配(比如过滤值"tech"能匹配"technology"),只需将精确匹配改为包含匹配:
const search = (array) => { return array.filter(item => { return filters.every(filter => { return keys.some(key => item[key].includes(filter)); }); }); };
内容的提问来源于stack exchange,提问作者Kareem Sleem
相关产品推荐
相关产品推荐

