Для массива student
вы можете создать карту mark_lookup
, которая указывает каждому ключу Subject
значение Mark
. Затем вы можете использовать .filter()
в вашем массиве courses
, чтобы найти все курсы, в которых .every()
предмет из внутреннего массива Subjects
имеет значение mark_lookup
больше, чем или равно значению для этого конкретного предмета.
См. Пример ниже:
const student = [{Subject: "math", Mark: 75}, {Subject: "science", Mark: 45}, {Subject: "programming", Mark: 90}];
const courses = [{ Name: "Computer Science", Subjects: [{name: "math", value: 50}, {name: "programming", value: 60}] }, { Name: "Information Technology", Subjects: [{name: "programming", value: 50}] }, { Name: "Chemistry", Subjects: [{name: "math", value: 50}, {name: "science", value: 50}] }, { Name: "Psychology", Subjects: [{name: "english", value: 50}, {name: "science", value: 50}] }];
const getCourses = (student, courses) => {
const mark_lookup = new Map(student.map(({Subject, Mark}) => [Subject, Mark]));
return courses.filter(({Subjects}) => Subjects.every(
({name, value}) => (mark_lookup.get(name) || 0) >= value
));
}
console.log(getCourses(student, courses));
.as-console-wrapper { max-height: 100% !important;} /* ignore */