Как посчитать среднее арифметическое в массиве?

Есть массив студентов с оценками, как правильно посчитать среднее арифметическое с начала одного студента а позже и группы целиком? Вывести результат через Алерт. Желательно бы решить через функции(не совсем понимаю как они работают).

const students = [
    {
        id:10,
        name: 'John Smith',
        marks: [10, 8, 6, 9, 8, 7 ]
    },
    {
        id:11,
        name: 'John Doe',
        marks: [ 9, 8, 7, 6, 7 ]
    },
    {
        id:12,
        name: 'Thomas Anderson',
        marks: [6, 7, 10, 8 ]
    },
    {
        id:13
        name: 'Jean-Baptiste Emanuel Zorg',
        marks: [10, 9, 8, 9 ]
    }
]
function getStudentAverageMark(student){
// тут посчитать одного студента
}
function getGroupAverageMark(students){
// тут посчитать среднее арифметическое всех оценок
}

Ответы (2 шт):

Автор решения: Проста Miha

Вы имеете ввиду что-то такое?

const students = [{
    id: 10,
    name: 'John Smith',
    marks: [10, 8, 6, 9, 8, 7]
  },
  {
    id: 11,
    name: 'John Doe',
    marks: [9, 8, 7, 6, 7]
  },
  {
    id: 12,
    name: 'Thomas Anderson',
    marks: [6, 7, 10, 8]
  },
  {
    id: 13,
    name: 'Jean-Baptiste Emanuel Zorg',
    marks: [10, 9, 8, 9]
  }
]

function getStudentAverageMark(id = 0, name = '') {
  // Проходит через каждого студента и проверяем его ид на тот который нам нужен, если нашли то через функций reduce возвращаем сумму массива оценов
  let sum = 0, markCount = 1;
  for (let student of Object.values(students)) {
    if ((id !== 0 && student.id === id) || (name !== '' && student.name === name)) {
      markCount = student.marks.length;
      for (let mark of student.marks) {
        sum += mark;
      }
      break;
    }
  }
  return sum / markCount;
}

// Поиск по id
alert('Средний балл ' + getStudentAverageMark(12));
// Поиск по name
alert('Средний балл ' + getStudentAverageMark(0, 'Thomas Anderson'));

→ Ссылка
Автор решения: Danil Apsadikov

const students = [{
    id: 10,
    name: 'John Smith',
    marks: [10, 8, 6, 9, 8, 7]
  },
  {
    id: 11,
    name: 'John Doe',
    marks: [9, 8, 7, 6, 7]
  },
  {
    id: 12,
    name: 'Thomas Anderson',
    marks: [6, 7, 10, 8]
  },
  {
    id: 13,
    name: 'Jean-Baptiste Emanuel Zorg',
    marks: [10, 9, 8, 9]
  }
]

function getStudentAverageMark(student) {
  return student.marks.reduce((a, e) => a + e, 0) / student.marks.length;
}

console.log(getStudentAverageMark(students[0])); //8

function getGroupAverageMark(students) {
  let marks = students.flatMap(student => student.marks);
  return marks.reduce((a, e) => a + e, 0) / marks.length;
}

console.log(getGroupAverageMark(students)); //8

→ Ссылка