Как посчитать среднее арифметическое в массиве?
Есть массив студентов с оценками, как правильно посчитать среднее арифметическое с начала одного студента а позже и группы целиком? Вывести результат через Алерт. Желательно бы решить через функции(не совсем понимаю как они работают).
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