Я пытаюсь научиться функциональному программированию, используя JavaScript из учебника. Я должен рефакторинг некоторого кода, используя функциональное программирование и его трудно. как мне переписать этот код, используя map()
, filter()
и reduce()
.
Я должен переписать следующий код более функциональным способом. Я пытался, но продолжаю получать пустые массивы.
const students = [{
name: "Anna",
sex: "f",
grades: [4.5, 3.5, 4]
},
{
name: "Dennis",
sex: "m",
country: "Germany",
grades: [5, 1.5, 4]
},
{
name: "Martha",
sex: "f",
grades: [5, 4, 2.5, 3]
},
{
name: "Brock",
sex: "m",
grades: [4, 3, 2]
}
];
// Compute female student results
const femaleStudentsResults = [];
for (const student of students) {
if (student.sex === "f") {
let gradesSum = 0;
for (const grade of student.grades) {
gradesSum += grade;
}
const averageGrade = gradesSum / student.grades.length;
femaleStudentsResults.push({
name: student.name,
avgGrade: averageGrade
});
}
}
console.log(femaleStudentsResults);
Результаты должны быть идентичны этому:
[Object{avgGrade: 4, name: 'Anna'}, Object{avgGrade: 3.625, name: 'Martha'}]
Я начал с того, что разделил всех учениц на
const females = students.filter(gender => gender.sex === 'f')
Затем, чтобы вернуть массив оценок, которые я сделал
const grade = females.map(grade => grade.grades);
Но когда я пытаюсь найти среднее для оценок, используя reduce()
:
const grade = females
.map(grade => grade.grades)
.reduce((accum,curr)=>accum + curr)
Я получаю следующий результат 4.5,3.5,45,4,2.5,3
. Как я могу предотвратить это и получить только среднюю оценку за каждого ученика?