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

JavaScript如何实现动态多条件对象数组筛选

原代码失效原因

你写的筛选逻辑有三个核心问题,导致完全没有筛选效果:

  • Array.filter的回调函数需要返回布尔值来决定当前项是否保留,你在遍历筛选条件时只要碰到任意一个属性匹配,就直接执行return data2.add(item),根本没有校验剩余的其他筛选条件;最后回调返回的data2是Set实例,属于对象类型,在布尔判断中永远为真,所以所有数据都会被保留。
  • 没有处理价格这类区间范围的特殊筛选规则,直接拿数值和数组做相等判断,逻辑完全不成立。
  • 额外用Set存储结果属于多余操作,filter本身就会返回符合条件的新数组,不需要额外容器。
可直接用的动态筛选实现

核心规则:待筛选的数组项必须满足筛选对象里的全部条件才会被保留,同时自动区分精确匹配值和区间范围值的判断逻辑,完全适配任意数量的动态筛选字段:

const dd = fbdata.filter(item => {
  for (const key in myfilter) {
    const condition = myfilter[key];
    const targetVal = item[key];
    // 跳过未设置的空筛选条件
    if (condition === undefined || condition === null) continue;

    if (Array.isArray(condition)) {
      // 区间类筛选(如价格范围[min, max]),判断值是否在区间内
      const [min, max] = condition;
      if (targetVal < min || targetVal > max) return false;
    } else {
      // 普通精确匹配(如wifi: "Yes"、car:1),判断值是否相等
      // 需要严格类型校验就把 == 替换为 ===
      if (targetVal != condition) return false;
    }
  }
  // 所有条件校验通过,保留当前项
  return true;
});
效果说明
  • 不管myfilter里传入1个、2个还是更多筛选属性,代码都会自动遍历所有传入字段做校验,不需要提前硬编码判断字段名,完全适配动态筛选场景。
  • 自动识别区间类筛选规则:只要筛选条件的值是长度为2的数组,就自动按数值范围做区间判断,适配价格、评分这类范围筛选场景。
  • 字符串、数字、布尔类型的筛选值自动走精确匹配逻辑,适配wifi可用性、配套设施有无这类固定值筛选场景。
  • 用你给出的第一组筛选条件(wifi: "Yes"、price: [90,150]、car:1)测试,会精准返回数组中价格100、带车位、wifi可用的第一条数据,不会返回多余结果。

如果后续需要新增模糊搜索、多选项匹配这类筛选规则,只需要在判断condition类型的分支里追加对应判断逻辑即可,整体筛选结构不需要改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:36:19