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

JavaScript 如何基于动态条件数组对目标数据集实现多条件筛选?

JavaScript动态多条件数组过滤实现方案

实现思路

  • 预先创建运算符映射表,将每个判断运算符对应的比较逻辑封装为独立函数,后续新增运算符只需扩展该表即可
  • 使用Array.filter遍历待过滤的源数据集
  • 对每条数据使用Array.every校验所有筛选规则,只有全部规则都满足的数据才会被保留

完整实现代码

const conditionalArray = [
  { name: "line", condition: ">=", value: 5 },
  // 如需得到你给出的期望结果,可将第二条规则调整为如下配置
  { name: "revene", condition: "<", value: 5 },
];
const dataTofilter = [
  { line: 3, revene: 4, sale: 3, fridge: "lg" },
  { line: 6, revene: 3, sale: 2, fridge: "samsung" },
];
// 运算符映射表,可按需扩展新的运算符规则
const operatorMap = {
  '>': (actual, expected) => actual > expected,
  '>=': (actual, expected) => actual >= expected,
  '<': (actual, expected) => actual < expected,
  '<=': (actual, expected) => actual <= expected,
  '==': (actual, expected) => actual == expected,
  '===': (actual, expected) => actual === expected,
  '!=': (actual, expected) => actual != expected,
  '!==': (actual, expected) => actual !== expected,
  // in运算符支持单个值、数组两种格式的对比值
  'in': (actual, expected) => Array.isArray(expected) ? expected.includes(actual) : [expected].includes(actual),
  'notIn': (actual, expected) => !operatorMap['in'](actual, expected)
}
/**
 * 动态多条件过滤方法
 * @param {Array} data 待过滤源数据集
 * @param {Array} conditions 筛选规则数组
 * @returns {Array} 过滤后的结果集
 */
function filterByConditions(data, conditions) {
  return data.filter(item => {
    return conditions.every(rule => {
      const actualVal = item[rule.name];
      const compareFn = operatorMap[rule.condition];
      // 未匹配到对应运算符时默认不保留该数据,可按需调整为跳过当前规则
      if (!compareFn) return false;
      return compareFn(actualVal, rule.value);
    })
  })
}
// 调用方法
const result = filterByConditions(dataTofilter, conditionalArray);
console.log(result); // 输出:[{ line: 6, revene: 3, sale: 2, fridge: "samsung" }]

扩展说明

如果需要支持更多筛选规则,比如字符串模糊匹配、范围判断等,只需在operatorMap中新增对应的运算符和处理逻辑即可,不需要修改核心过滤代码。

注:你原始给出的第二条筛选规则{ name: "revene", condition: "in", value: 6 }与期望结果逻辑不匹配,两条测试数据的revene值分别为4、3,均不在[6]范围内,所以才调整为<规则来适配你的期望输出,可根据实际业务需求调整对应规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:30:05