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

基于多数组键的对象数组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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:56:13