如何在lodash中过滤另一个对象的年龄?但是criteria对象是数组..
var form = { type: ['xyz', 'abc'], name: 'pre-1' }
var items = [
{ type: 'xyz', name: 'pre-1' },
{ type: 'abc', name: 'pre-1' },
{ type: 'xyz', name: 'pre-2' },
]
const results = lodash.filter(items, form);results应为xyz和abc
results = [{ type: 'xyz', name: 'pre-1' }, { type: 'abc', name: 'pre-1' }]这是不是我可以用filter方法做的事情?
发布于 2019-05-31 20:12:34
好的,您可以使用自定义过滤方法与lodash一起使用。请在下面进行尝试:
var form = { type: ['xyz', 'abc'], name: 'pre-1' }
var items = [
{ type: 'xyz', name: 'pre-1' },
{ type: 'abc', name: 'pre-1' },
{ type: 'xyz', name: 'pre-2' },
]
let filtered = _.filter(items, (item)=>{
return form.type.indexOf(item.type) >= 0 && form.name == item.name
});
console.log(filtered);<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
发布于 2019-05-31 20:17:08
var form = { type: ['xyz', 'abc'], name: 'pre-1' }
var items = [
{ type: 'xyz', name: 'pre-1' },
{ type: 'abc', name: 'pre-1' },
{ type: 'xyz', name: 'pre-2' },
]
var item = _.filter(items, i => {
return form.type.indexOf(i.type) > -1 && form.name === i.name
});
console.log(item)发布于 2019-05-31 20:33:37
检查是否为form.name === item.name,如果是,请使用Array.includes()检查item.type是否出现在form.type中。
注意:我已经使用了普通的JS过滤器并包含了方法,但是您可以将它们替换为lodash的_.filter()和_.includes()。
const form = { type: ['xyz', 'abc'], name: 'pre-1' }
const items = [{"type":"xyz","name":"pre-1"},{"type":"abc","name":"pre-1"},{"type":"xyz","name":"pre-2"}]
const result = items.filter(item =>
form.name === item.name && form.type.includes(item.type)
)
console.log(result)
lodash的另一个选项是使用_.intersectionWith(),并在comperator函数中检查项的名称是否与表单的名称相同,类型是否存在于类型中。
const form = { type: ['xyz', 'abc'], name: 'pre-1' }
const items = [{"type":"xyz","name":"pre-1"},{"type":"abc","name":"pre-1"},{"type":"xyz","name":"pre-2"}]
const result = _.intersectionWith(items, form.type, (item, type) =>
form.name === item.name && item.type === type
)
console.log(result)<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
https://stackoverflow.com/questions/56394721
复制相似问题