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]);
});
\过滤器
接受:
你确定要使用
.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)),
);
}