Во-первых, пример того, что мне требуется от моей функции. Массив студентов передается в функцию, и функция возвращает массив с максимальным баллом каждого студента в качестве элементов.
getStudentTopScores([
{
id: 1,
name: "Jacek",
scores: [5, 3, 4, 2, 5, 5]
},
{
id: 2,
name: "Ewa",
scores: [2, 3, 3, 3, 2, 5]
},
{
id: 3,
name: "Zygmunt",
scores: [2, 2, 4, 4, 3, 3]
}
]) ➞ [5, 5, 4]
Ниже моя рабочая функция. Мне нужна помощь, чтобы объяснить, почему именно это работает.
const getStudentTopScores=students=>
students
.map(student=>student.scores)
.reduce((arr,scores)=>{
const score = scores.length?Math.max(...scores):0;
arr.push(score);
return arr;
},[]);
Итак, что происходит с моим кодом?
- Массив студентов передается в функцию getStudentTopScores
Метод .map () применяется к массиву:
.map (student => student.scores)Я думаю, что это доступ к массиву показателей , хранящемуся внутри студентов.
метод .reduce () применяется к каждому оценка . Это берет каждую оценку и спрашивает: является ли эта оценка максимальной оценкой в массиве? Если ответ положительный, то это значение сохраняется в оценка , если ответ отрицательный, то0 сохраняется в оценка .
значение, сохраненное в оценка , добавляется в аккумулятор ( обр. ).
Это значение относится к конкретным учащимсянаивысший балл. Что если есть несколько одинаковых и максимальных баллов? Почему все это не добавляется в накопитель, создавая значение, которое является суммой всех высших баллов для этого человека?
Код работает только с пустым массивом в конце. Я понятия не имею, зачем это нужно. Пожалуйста, объясните это.