lodash过滤多个matchesProperty

时间:2016-09-19 11:59:07

标签: javascript lodash

所以我试图使用以下模板过滤我的收藏:

// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => objects for ['fred']

所以说例如我有以下对象:

{
    name: 'Marc'
  user: {
        division:{
            id: 1
      }
  },
  status:0
}

在我的数组中,我有很多不同的实例。

现在我想过滤我的数组,只包含status = 1user.division.id = 1

的对象

你会认为你会输入这样的东西:

_.filter(myArr, ['user.division.id', 1], ['status', 1])

然而,这不起作用:(

我也尝试过:

_.filter(myArr, ['user.division.id', 12,'status', 1])

同样的结果。

这两个都只评估第一个表达式(即):

_.filter(myArr, ['user.division.id', 1])

似乎永远不会评估第二个表达式。

所以我的问题是你怎么能用多场比赛做到这一点?

2 个答案:

答案 0 :(得分:0)

好的,因为@valz指出我无法在matchesProperty中使用多个键/值

所以我做的是以下内容:

var filters = {'user.division.id': 1, status:1}
_.forEach(filters, function(value, key) {
    data = _.filter(data, [key,value]);
});

答案 1 :(得分:0)

_.filter要么接受:

  1. 单个多级路径及其值(由2个元素组成的数组)。
  2. 具有一级键和值的平面对象。
  3. 带有键和值的嵌套对象。

因此,如果要使用基于平坦路径的过滤器,可以将其压缩到嵌套对象中以利用(3):

function filterDeep(collection, filters) {
  return _.filter(
    collection,
    _.zipObjectDeep(_.keys(filters), _.values(filters)),
  );
}