Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript lodash过滤器多重匹配属性_Javascript_Lodash - Fatal编程技术网

Javascript lodash过滤器多重匹配属性

Javascript lodash过滤器多重匹配属性,javascript,lodash,Javascript,Lodash,因此,我尝试使用以下模板筛选我的收藏: // The `_.matchesProperty` iteratee shorthand. _.filter(users, ['active', false]); // => objects for ['fred'] 比如说,我有以下对象: { name: 'Marc' user: { division:{ id: 1 } }, status:0 } 在我的数组中,这个对象

因此,我尝试使用以下模板筛选我的收藏:

// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => objects for ['fred']
比如说,我有以下对象:

{
    name: 'Marc'
  user: {
        division:{
            id: 1
      }
  },
  status:0
}
在我的数组中,这个对象有很多不同的实例

现在,我希望筛选数组,使其仅包含
status=1
user.division.id=1

您可能会认为您会键入如下内容:

_.filter(myArr, ['user.division.id', 1], ['status', 1])
但是,这不起作用:(

我还尝试:

_.filter(myArr, ['user.division.id', 12,'status', 1])
同样的结果

这两个表达式仅计算第一个表达式(即):

第二个表达式似乎从未计算过


所以我的问题是,如何使用多个匹配项来实现这一点?

好的,正如@valz指出的,我无法在
matchesProperty

所以我做了以下几点:

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

\过滤器
接受:

  • 单个多级路径及其值(作为2个元素的数组)
  • 具有一级关键帧和值的平面对象
  • 具有键和值的嵌套对象
  • 因此,如果我们想使用基于平面路径的过滤器,我们可以将其压缩到嵌套对象中,以利用(3):


    你确定要使用
    .matchesProperty
    语法吗?这里的
    .matches
    不是更合适吗?虽然我不确定你是否可以在那里使用展平键。我可以使用展平键,但是如果你使用
    .filter(用户,{'user':{'division':{'id':1},'status':1}),我就不能使用多个键
    然后你可以进行多参数匹配。这是
    .matches
    语法,在这里你给函数一个它需要匹配的对象。我不认为
    匹配属性
    允许提供多个键/值。@vlaz遗憾的是,由于指令im的复杂性,我需要使用多个键/值irsHow是否使用区分大小写的过滤器?
    var filters = {'user.division.id': 1, status:1}
    _.forEach(filters, function(value, key) {
        data = _.filter(data, [key,value]);
    });
    
    function filterDeep(collection, filters) {
      return _.filter(
        collection,
        _.zipObjectDeep(_.keys(filters), _.values(filters)),
      );
    }