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

如何使用Lodash的filter方法实现单个key匹配多个值的筛选需求

Lodash实现单字段多值匹配筛选的方案

_.matches默认执行的是全等匹配,你传入{ 'age': [36, 40] }时,它会判断对象的age属性是否严格等于[36,40]这个数组,自然无法得到预期结果,你可以用以下几种方式实现需求:


方案1:直接在filter回调中结合_.includes判断

这是最简洁的实现方式,适合临时需求:

const result = _.filter(users, item => _.includes([36, 40], item.age));

如果需要同时叠加其他匹配条件,比如还要匹配active: true,可以组合使用_.matches和判断逻辑:

const result = _.filter(users, item => {
  return _.matches({active: true})(item) && _.includes([36,40], item.age);
});

方案2:封装通用的增强匹配函数

如果你希望保留类似{age: [36,40]}这种传参语法,可以自己封装一个工具函数,自动识别数组值做多值匹配:

function multiMatch(conditions) {
  return function(item) {
    return _.every(conditions, (condVal, key) => {
      // 如果条件值是数组,做多值包含匹配
      if (_.isArray(condVal)) {
        return _.includes(condVal, item[key]);
      }
      // 非数组值走默认的全等匹配
      return _.isEqual(item[key], condVal);
    })
  }
}

// 调用方式和你预期的完全一致
const result = _.filter(users, multiMatch({ 'age': [36, 40] }));

你也可以在这个函数里扩展更多匹配规则,比如支持正则匹配、范围匹配等。


方案3:使用_.overSome组合多个匹配条件

如果可选值不多,也可以用_.overSome组合多个_.matches条件:

const result = _.filter(users, _.overSome([
  _.matches({age: 36}),
  _.matches({age: 40})
]));

三种方案都可以实现你要的筛选效果,其中方案2的调用方式最贴合你写的预期语法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:57:00