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

如何基于键值为数组的过滤条件,筛选对象数组中匹配任意规则的元素

实现方案

核心逻辑梳理

  • 先过滤掉filter中的空数组字段,空字段不参与匹配
  • 对每个待筛选的数据项,只要任意一个有效过滤字段和对应filter字段存在公共元素,就保留该数据项
  • 用Set存储过滤值优化匹配效率,避免数组遍历的性能损耗

完整可运行代码

function filterData(filter, data) {
  // 预处理过滤条件:仅保留非空字段,转成Set优化查找效率
  const validConditions = Object.fromEntries(
    Object.entries(filter)
      .filter(([_, filterValues]) => filterValues.length > 0)
      .map(([filterKey, filterValues]) => [filterKey, new Set(filterValues)])
  )

  // 无有效过滤条件时直接返回全部数据,可根据需求调整为返回空数组
  if (Object.keys(validConditions).length === 0) {
    return [...data]
  }

  // 执行筛选
  return data.filter(item => {
    // 只要任意一个字段匹配成功就保留当前项
    return Object.entries(validConditions).some(([key, conditionSet]) => {
      const itemFieldValues = item[key] || []
      return itemFieldValues.some(val => conditionSet.has(val))
    })
  })
}

调用示例

// 测试用例
const testFilter = {filter1:["mine"], filter2:["F","D"]}
const testData = [
  { id:1, filter1:["mine"], filter2:["E","C"]},
  { id:2, filter1:["mine"], filter2:["E","C","F"]},
  { id:3, filter1:["your"], filter2:["C"]},
  { id:4, filter1:["your"], filter2:["D","C"]},
  { id:5, filter1:["other"], filter2:["F"]},
]
console.log(filterData(testFilter, testData)) // 输出与示例要求一致的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:24:09