Как посчитать среднюю оценку из массива оценок, который находится в массиве обьектов?
Имеется массив студентов (вставлю только двоих), в каждом есть массив его оценок. Задача такая: нужно создать каждому обьекту новый ключ "average", и в этот ключ записать среднюю оценку студента. Понимаю, что нужно использовать метод map для того, чтобы работать только с массивом оценок, и метод reduce, чтобы посчитать сумму оценок и разделить на student.mark.length. Не получается это реализовать в виде кода. Вот мои каляки:
let students = [
{
firstName: 'Will',
lastName: 'Smith',
age: 25,
mark: [12,34,56,67,78,89],
course: 'JS',
id: 1,
},
{
firstName: 'Emily',
lastName: 'Blunt',
age: 20,
mark: [45,76,23,86],
course: 'Design',
id: 2,
}
]
let newKey = students.map(o => ({ ...o, 'average': 0}));
console.log(newKey);
let marks = students.map(function (student) {
return student.mark;
});
console.log(marks);
let sumMark = marks.reduce(function(sum, student) {
return sum += student;
}, 0);
console.log(sumMark);
Ответы (1 шт):
Если нужно менять исходный массив, то всё проще)
let students = [
{
firstName: 'Will',
lastName: 'Smith',
age: 25,
mark: [12,34,56,67,78,89],
course: 'JS',
id: 1,
},
{
firstName: 'Emily',
lastName: 'Blunt',
age: 20,
mark: [45,76,23,86],
course: 'Design',
id: 2,
}
];
for (const student of students) {
student.average = student.mark.reduce((all, mark) => all + mark) / student.mark.length;
}
console.log(students);
Если нужна копия:
const students = [
{
firstName: 'Will',
lastName: 'Smith',
age: 25,
mark: [12,34,56,67,78,89],
course: 'JS',
id: 1,
},
{
firstName: 'Emily',
lastName: 'Blunt',
age: 20,
mark: [45,76,23,86],
course: 'Design',
id: 2,
}
];
const studentsWithAverage = students.map(
student => ({
...student,
average: student.mark.reduce((all, mark) => all + mark) / student.mark.length,
})
);
console.log(studentsWithAverage);
(Только нужно учесть, что копия тут будет неглубокая, массив оценок будет присвоен по ссылке; если это нежелательно, нужно вдобавок скопировать массив, например через slice или spread).