Javascript lodash通过多个过滤器过滤数据
我有这些数据,需要使用lodash应用所有过滤器。最终输出为空Javascript lodash通过多个过滤器过滤数据,javascript,lodash,Javascript,Lodash,我有这些数据,需要使用lodash应用所有过滤器。最终输出为空 filters=[{'gender':'M'},{'division':'police'}] 数据=[{'name':'tom','gender':'M','division':'police'}, {'name':'bob','gender':'M','division':'police'}, {'name':'dave','gender':'F','division':'IT'}, ] data=u2;.filter(数据,函
filters=[{'gender':'M'},{'division':'police'}]
数据=[{'name':'tom','gender':'M','division':'police'},
{'name':'bob','gender':'M','division':'police'},
{'name':'dave','gender':'F','division':'IT'},
]
data=u2;.filter(数据,函数(项){
_.forEach(过滤器,函数(过滤器){
找到的数据=u.filter([item],filter)
console.log('data\u found-',data\u found)
})
})
console.log(data)
您可以使用.filter
方法以及.every
方法根据另一个谓词集合筛选集合(我在这里使用箭头函数)。本示例还假设筛选对象只有一个键/值对,如示例中所示:
const filteredData = _.filter(data, item => {
return _.every(filters, filter => {
let filterKey = Object.keys(filter)[0]
return item[filterKey] === filter[filterKey]
})
})
一个更干净的解决方案是将过滤器组合成一个对象,并使用\uMatches
方法进行比较:
const filter = { gender: 'M', division: 'police' }
const filteredData = _.filter(data, _.matches(filter))
可以将过滤器阵列组合到单个对象,并将其用作过滤器
combined = filters.reduce((acc,item) => ({...acc, ...item}))
// combined is = {'gender':'M', 'division':'police'}
data = _.filter(data, combined)
如果您不想使用rest操作符,那么有一个lodash可以将对象数组组合成单个对象您可以将两个过滤器组合成一个。像这样的
_.filter(data, function(item){
if(item.gender === 'M' && item.division === 'police') return item;
})
这将为您提供所有带有性别男性和分区警察的记录您提供给
过滤器的谓词
从不返回任何内容。他们两个都不是。编辑:我实际上很困惑应该发生什么,因为有一个foreach不断地覆盖找到的数据
…不管是什么,最终输出应该包含所有与性别男性和警察部门的记录