基于多数组键的对象数组AND条件过滤问题求助
实现多条件AND过滤对象数组
需求很明确:用Filters里的所有条件(AND逻辑)筛选Data数组,只有全部满足所有过滤条件的条目才能留下来。
你原来代码的问题
现在的代码逻辑不对:
- 遍历每个过滤器时,只要条目符合单个条件就往
newData里塞,这样会把符合任意单个条件的条目重复添加,而且根本没校验是否满足所有条件。 - 用
map来做遍历处理也不合适,map是用来转换数组元素的,不是干这个的。
正确写法
关键逻辑就是:对Data里的每一条数据,检查它能不能通过Filters里的每一个过滤规则。
直接上代码:
const Data = [ {first_name: 'Ammy', city_name: 'LA', age: 22, designation: 'officer'}, {first_name: 'Dave', city_name: 'Paris', age: 23, designation: 'engineer'}, {first_name: 'Cindy', city_name: 'Tokyo', age: 32, designation: 'influencer'}, {first_name: 'Barn', city_name: 'sydney', age: 34, designation: 'lawyer'}, {first_name: 'Yolanda', city_name: 'Seoul', age: 32, designation: 'chef'}, {first_name: 'Mike', city_name: 'London', age: 42, designation: 'bartender'}, {first_name: 'Olivia', city_name: 'LA', age: 34, designation: 'officer'} ]; const Filters = { first_name: ['Ammy', 'Dave', 'Mike'], city_name: ['LA'], age: [22, 34] }; // 过滤逻辑 const filteredData = Data.filter(item => { // 确保所有过滤条件都满足 return Object.entries(Filters).every(([key, allowedValues]) => { // 检查当前条目对应字段的值是否在允许列表里 return allowedValues.includes(item[key]); }); }); console.log(filteredData); // 输出结果:[{first_name: 'Ammy', city_name: 'LA', age: 22, designation: 'officer'}]
额外说明
- 不管
Filters是只有单个键(比如{ first_name: ['Dave']})还是多个键,这个逻辑都能自动适配,始终用AND逻辑校验所有条件。 - 如果需要忽略大小写匹配(比如城市名'sydney'和'Sydney'算同一个),可以把判断逻辑改成这样:
return allowedValues.some(allowedValue => String(allowedValue).toLowerCase() === String(item[key]).toLowerCase() ); - 这里用
every方法就是实现AND逻辑的关键——只要有一个条件不满足,这条数据就会被排除。
内容的提问来源于stack exchange,提问作者lucky
相关产品推荐
相关产品推荐

