我有一个对象数组(具有studentID
,grade
,dob
,registeredDate
之类的属性的学生对象)和另一个对象数组(books对象)具有属性studentID
,bookID
,bookISBN
)。
这是一个用于管理小型学校图书馆的Web应用程序。我想做的是,当学生借着studentID
4借书(例如标题为 Welcome Home )时,当您尝试借书时(当然是自图书馆可以有很多存货)给其他人,studentID
4的学生不应出现在有资格获得该书的学生列表中(除非该学生已退还该书)首先)。
booksList数组如下:
[
{
bookEdition: "2nd edition",
bookISBN: 9876533278765,
bookStatus: 0,
bookTitle: "Real Machines",
dateTaken: "2018-10-28",
returnDate: "2018-11-27",
studentID: "0000003"
},
{
bookEdition: "2015 edition",
bookISBN: 9876532226712,
bookStatus: 0,
bookTitle: "Real Machines",
dateTaken: "2018-08-28",
returnDate: "2018-09-27",
studentID: "0000004"
}
];
学生名单如下:
[
{
bio: "Needs extra work. Has problems with mathematics",
birthday: "2005-05-12",
className: "grade 5",
fullname: "Bridget Friday",
gender: "Female",
parentName: "Josam Friday",
studentID: "0000003",
studentStatus: "approved"
},
{
bio: "A bit naughty but intelligent. Pay close attention to his diet.",
birthday: "2003-11-07",
className: "grade 6",
fullname: "Charles Ben",
gender: "Male",
parentName: "Chris Ben",
studentID: "0000004",
studentStatus: "approved"
}
];
现在,我正在尝试使用过滤器功能,但没有给我想要的结果。链接两个数组对象及其中的对象的是studentID
。
我尝试过
var legitStudents = studentsList.filter(el => {
return !booksList.includes(el.studentID);
});
以上操作无效。数组(studentList
和booksList
)是动态获取的,我无法确定studentID
中有哪些booksList
。
如何让它按我的意愿工作?
答案 0 :(得分:1)
return !booksList.includes(el.studentID);
应该是
return !booksList.map(i => i.studentID).includes(el.studentID);
正如几个人在对您的问题的评论中说的那样,问题是您的代码期望booksList
是studentID
的数组。由于这实际上是学生已经签出的书的列表,因此您首先需要对studentID
中所有booksList
的数组进行排列,然后可以在结果数组上使用includes
。参见map。
答案 1 :(得分:1)
您可以使用Rocky Sims的解决方案,也可以尝试
var legitStudents = studentList.filter(student => {
return !booksList.filter(book => book.studentID === student.studentID).length;
});