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

如何用JavaScript实现对象类型数据集按查询参数的且逻辑筛选

问题原因

你现有代码的逻辑是:逐个匹配单个查询条件,把所有满足单个条件的记录塞到结果集后去重,只要满足任意一个条件就会被保留,自然是OR逻辑,不符合要求。

修改方案

正确的逻辑是遍历每一条数据,判断它是否满足所有查询字段的要求:同一字段的多个可选值为OR关系,不同字段之间为AND关系,全部满足才保留。

修改后代码如下:

import _ from 'lodash';

export const Filtered = (qStrings, dataSet) => {
  // 无查询条件时直接返回全量数据
  if (_.isEmpty(qStrings)) return Object.values(dataSet);

  return _.filter(Object.values(dataSet), (sess) => {
    // 遍历所有查询条件,只有全部满足才返回true
    return Object.entries(qStrings)
      // 过滤掉非数组的无效查询字段(适配你示例中qStrings带length属性的异常情况)
      .filter(([_, allowedValues]) => Array.isArray(allowedValues))
      .every(([field, allowedValues]) => {
        if (!sess.hasOwnProperty(field)) return false;
        // 把可选值统一转字符串后判断当前字段值是否在可选范围内
        const formattedAllowed = allowedValues.map(val => val.toString());
        return formattedAllowed.includes(sess[field].toString());
      });
  });
};
效果验证

以你给出的示例参数为例,筛选后会返回同时满足Category为Communications and Media/Education且Role为Analyst的两条记录(ID为1111、2222),完全符合AND逻辑的要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:01