Попытка сравнить объекты в разных массивах в Javascript - PullRequest
0 голосов
/ 03 февраля 2020

Array Structures

Привет, я создаю приложение, которое показывает студентам, на какие курсы они могут претендовать в зависимости от их оценок. Я должен отфильтровать курсы по тем же предметам, что и предметы ученика, и mark должно быть> = value. Я приложил изображение того, как выглядит JSON, первые 6 объектов - это оценки учеников, остальные 10 объектов - это курсы, каждый курс имеет множество предметов ... это предметы, которые мы проверяем .

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Для массива 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 */
0 голосов
/ 03 февраля 2020

1) Создать объект ученика marks из массива ученика. 2) Go через курс, и каждый курс фильтра предметов основывается на требовании. 3) курс pu sh с обновленными предметами к результатам, если предметы больше 0

const student = [
  { Subject: "English First Additional Language", Mark: 80 },
  { Subject: "Physical Sciences", Mark: 60 },
  { Subject: "Mathematics", Mark: 70 }
];
const courses = [
  {
    Name: "Computer Science",
    Subjects: [
      { name: "English First Additional Language", value: 50 },
      { name: "Mathematics", value: 80 }
    ]
  },
  {
    Name: "Information Technology",
    Subjects: [{ name: "Physical Sciences", value: 50 }]
  },
  {
    Name: "Chemistry",
    Subjects: [{ name: "Physical Sciences", value: 70 }]
  }
];

const marks = student.reduce((acc, { Subject, Mark }) => {
  acc[Subject] = Mark;
  return acc;
}, {});


const short_listed = courses.reduce((acc, { Name, Subjects }) => {
  const sel_subjects = Subjects.filter(({ name, value }) => marks[name] > value);
  if (sel_subjects.length > 0) {
    acc.push({
      Name,
      Subjects: sel_subjects
    });
  }
  return acc;
}, []);

console.log(short_listed); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...