Array Structures

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

0
seeSharpGeek 3 Фев 2020 в 04:53

2 ответа

Лучший ответ

Для массива 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 */
1
Nick Parsons 3 Фев 2020 в 03:11

1) Создать объект ученика marks из массива ученика. 2) Пройдите курс, и каждый курс фильтрует предметы по требованию. 3) подтолкнуть курс с обновленными предметами к результатам, если предметов больше 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); 
0
Siva Kondapi Venkata 3 Фев 2020 в 04:59