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

React中如何基于动态多条件对象实现对象数组的动态过滤(替代固定&&判断逻辑)

动态过滤数组的解决方案

这问题我做项目时也碰到过,写死&&判断确实太不灵活了,尤其是过滤条件的属性多且会动态变化的时候。给你分享一个简洁又通用的实现方式:

核心思路

先从过滤条件对象arrTofilter中提取有实际过滤值的属性(也就是数组非空的那些键值对),然后对主数组的每个元素,检查它是否满足所有这些活跃的过滤条件。

代码实现

let mainArr = [{ AREA: "INDIA", GROUP_DESC: "Group A", BUSINESS_ID: "1", SUB_REGION: "KARNATAKA" }, { AREA: "INDIA", GROUP_DESC: "Group A", BUSINESS_ID: "2", SUB_REGION: "Tamilnadu" }, { AREA: "INDIA", GROUP_DESC: "Group C", BUSINESS_ID: "3", SUB_REGION: "Kerala" }, { AREA: "AFRICA", GROUP_DESC: "Group D", BUSINESS_ID: "4", SUB_REGION: "Nigeria" }];
let arrTofilter = { AREA: [], GROUP_DESC: ['Group A', 'Group D'], BUSINESS_ID: ['2'], SUB_REGION: [] };

// 第一步:筛选出非空的过滤条件
const activeFilters = Object.entries(arrTofilter)
  .filter(([_, filterValues]) => filterValues.length > 0);

// 第二步:动态过滤主数组
const finalArr = mainArr.filter(item => {
  // 检查当前元素是否满足所有活跃过滤条件
  return activeFilters.every(([key, filterValues]) => {
    return filterValues.includes(item[key]);
  });
});

console.log(finalArr);
// 输出结果:[{ AREA: "INDIA", GROUP_DESC: "Group A", BUSINESS_ID: "2", SUB_REGION: "Tamilnadu" }]

动态适配演示

当arrTofilter更新为只有GROUP_DESC有值时:

let arrTofilter = {AREA: [], GROUP_DESC: ['Group A','Group D'], BUSINESS_ID: [], SUB_REGION: []};

// 重复上面的过滤逻辑
const activeFilters = Object.entries(arrTofilter).filter(([_, values]) => values.length > 0);
const finalArr = mainArr.filter(item => activeFilters.every(([key, values]) => values.includes(item[key])));

console.log(finalArr);
// 输出结果:前两个和第四个元素(GROUP_DESC为Group A或Group D的项)

优势说明

  • 完全动态:不管arrTofilter有多少个属性,都会自动处理,不需要手动添加&&判断
  • 自动忽略空条件:如果某个属性的过滤数组为空,会被自动排除在过滤逻辑之外
  • 逻辑清晰:把过滤条件的筛选和元素检查分开,代码可读性高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:22:45