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

JavaScript中根据多对象真值条件实现数组数据筛选

多维度财经日历筛选实现方案

实现逻辑

  • 先预处理所有筛选维度:提取每个维度下被选中的选项值,如果某个维度没有任何选中项(配置值全为false),直接跳过该维度,不做校验
  • 遍历原始数据,对单条数据依次校验所有启用的筛选维度:数据对应字段的值属于该维度选中值范围,即判定为通过该维度校验
  • 只有全部启用维度都校验通过的数据,才会被纳入最终返回结果,维度之间为「且」的匹配关系

可复用实现代码

/**
 * 通用多维度筛选函数
 * @param {Array} source 原始待筛选数据集
 * @param {Object} filterMap 筛选配置映射,键为数据对应字段名,值为该维度的选中配置对象
 * @returns {Array} 筛选后结果集
 */
function filterData(source, filterMap) {
  // 生成有效筛选规则
  const activeRules = {}
  for (const [field, config] of Object.entries(filterMap)) {
    const selected = Object.entries(config)
      .filter(([, checked]) => checked)
      .map(([val]) => val)
    if (selected.length) activeRules[field] = selected
  }

  // 无有效规则直接返回原数据副本
  if (!Object.keys(activeRules).length) return [...source]

  // 执行过滤
  return source.filter(item => {
    return Object.entries(activeRules).every(([field, allowValues]) => {
      return allowValues.includes(item[field])
    })
  })
}

调用示例

对应提供的测试数据和筛选配置,调用方式如下:

// 传入原始数据和各维度配置
const result = filterData(data, {
  country: countrys,
  day: days,
  impact: impacts
})

// 输出结果为预期的id=26201的第一条记录
console.log(result)

扩展说明

  • 该实现为通用逻辑,后续新增筛选维度(比如事件分类、时间范围等)时,只需要在调用filterData时传入对应字段名和配置对象即可,无需修改核心过滤代码
  • 完全匹配规则要求:未选中任何选项的维度会自动跳过,不会出现空筛选导致结果为0的问题;启用的维度之间为严格的且关系,和主流财经日历的筛选交互逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:33:20