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
中包含
,并且只有至少一个项目需要通过此测试-正确吗?