Javascript 比较过滤器系统的数组和对象?
我有两个对象/数组需要对过滤系统进行比较,下面是一组粗略的数据:Javascript 比较过滤器系统的数组和对象?,javascript,lodash,Javascript,Lodash,我有两个对象/数组需要对过滤系统进行比较,下面是一组粗略的数据: var books = [{ 'title': 'book a', 'relatedIds': [1, 2], 'authorId': 1, },{ 'title': 'book b', 'relatedIds': [1, 2, 3, 4], 'authorId': 2, },{ 'title': 'bo
var books = [{
'title': 'book a',
'relatedIds': [1, 2],
'authorId': 1,
},{
'title': 'book b',
'relatedIds': [1, 2, 3, 4],
'authorId': 2,
},{
'title': 'book a',
'relatedIds': [1],
'authorId': 3,
}];
var filters = {
'relatedIds' : [1, 2, 3],
'author': [1, 2]
};
我希望看到的是书籍a
(具有来自过滤器的相关id 1和2以及作者id 1)和书籍b
(具有来自过滤器的相关id 1、2和3以及作者id 2)的上述过滤器
我不希望看到书籍c
,因为即使它有正确的相关id,它的作者是3,不在过滤器中
我尝试过使用lodash的过滤方法:
_.filter(books, (book) => {
....
但是我看不出如何根据过滤器中的数组与书本上的数组或int/string进行比较。您可以使用,并且
用于从原始数据中仅获取所需的输出过滤器
用于检查元素的任何some
是否在相关ID
过滤器的
中可用相对ID
用于检查给定值在数组中是否可用includes
var books=[{'title':'bookaa','relatedIds':[1,2],'authorId':1,},{'title':'bookab','relatedIds':[1,2,3,4],'authorId':2,},{'title':'bookaa','relatedIds':[1],'authorId':3,}];
变量过滤器={
“relatedID”:[1,2,3],
“作者”:[1,2]
};
let op=books.filter({relatedId,authorId})=>(
relatedID.some(id=>filters.relatedID.includes(id))
&&filters.author.includes(authorId)
))
console.log(op)
用于通过检查结果的长度(如果没有类似项,则为0),在相关ID
中查找类似项。用于检查authorId
是否位于过滤器的author
数组中:
const books=[{“title”:“book a”,“relatedId”:[1,2],“authord”:[1},{“title”:“book b”,“relatedId”:[1,2,3,4],“authord”:[2},{“title”:“book a”,“relatedId”:[1],“authord”:[3}];
常量过滤器={“relatedId”:[1,2,3],“author”:[1,2]};
const result=\过滤器(books,o=>
_.交叉点(o.relatedID、过滤器.relatedID).长度&&
_.包括(filters.author、o.authord)
);
控制台日志(结果)代码>
您在使用lodash过滤器时没有实际显示您尝试了什么。这是一个很好的答案,您是否介意解释这一行relatedId.some(id=>filters.relatedId.includes(id))
以及发生了什么?@panthro添加解释,您可以检查谢谢,我仍然不确定您为什么使用一些
,然后使用包括
?当然,一些
足以检查元素的相关ID
是否在过滤器的相对ID
中可用?@panthro,因为相关ID
也是您的数据和过滤器中的数组,因此,您需要将数据的relatedId
的每个值与过滤器relatedId
进行比较,除非您找到匹配项,否则relatedId
中的元素需要在过滤器ID
中包含,并且只有至少一个项目需要通过此测试-正确吗?