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

如何使用动态生成的值对二维数组进行多条件过滤?

动态多条件过滤二维数组

针对你的二维数组场景,完全可以不用eval()或者多次迭代过滤,我们可以通过配置化的条件定义结合数组的every()和some()方法来实现灵活的多条件组合(同一列OR、不同列AND),既安全又易维护。

场景1:同一列多值OR + 不同列AND(最常用)

如果你的需求是:processDescription是Adsorption或Desorption 并且 productID是PREC,可以按以下方式实现:

首先定义你的过滤条件配置——键是列的索引,值是该列允许的取值数组(数组内的元素是OR关系):

// 配置条件:列索引 => 允许的取值(OR逻辑)
const filterConditions = {
  5: ['Adsorption', 'Desorption'], // processDescription列:匹配任意一个值
  6: ['PREC']                      // productID列:必须匹配该值
};

然后执行过滤:

filtered_data = filtered_data.filter(row => {
  // 所有列的条件都要满足(AND逻辑)
  return Object.entries(filterConditions).every(([colIndex, allowedValues]) => {
    const currentValue = row[parseInt(colIndex)];
    // 检查当前行的该列值是否在允许列表中(OR逻辑)
    return allowedValues.includes(currentValue);
  });
});

场景2:复杂组合条件(多个AND组之间OR)

如果你的需求是更复杂的逻辑:processDescription是Adsorption 或者 processDescription是Desorption且productID是PREC(也就是你写的result[5] === 'Adsorption' || result[5] === 'Desorption' && result[6] === 'PREC'),可以用分组配置来实现:

// 配置条件组:每组内是AND逻辑,组与组之间是OR逻辑
const filterGroups = [
  { 5: ['Adsorption'] }, // 组1:仅需processDescription为Adsorption
  { 5: ['Desorption'], 6: ['PREC'] } // 组2:processDescription为Desorption且productID为PREC
];

filtered_data = filtered_data.filter(row => {
  // 满足任意一个条件组即可(OR逻辑)
  return filterGroups.some(group => {
    // 组内所有列条件必须满足(AND逻辑)
    return Object.entries(group).every(([colIndex, allowedValues]) => {
      const currentValue = row[parseInt(colIndex)];
      return allowedValues.includes(currentValue);
    });
  });
});

为什么这个方案更好?

  • 无安全风险:完全避免了eval()带来的代码注入问题;
  • 动态扩展性强:要添加新的过滤条件,只需修改配置对象/数组,不用改动过滤逻辑代码;
  • 高效简洁:一次filter遍历完成所有判断,不需要多次迭代过滤数组;
  • 可读性高:配置结构清晰,逻辑一目了然。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:51:03