Как посчитать среднюю оценку из массива оценок, который находится в массиве обьектов?

Имеется массив студентов (вставлю только двоих), в каждом есть массив его оценок. Задача такая: нужно создать каждому обьекту новый ключ "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 шт):

Автор решения: vsemozhebuty

Если нужно менять исходный массив, то всё проще)

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).

→ Ссылка