🛡️Escudo anti spoilers🛡️
.
A este punto espero ya entiendas cual es el propósito de este texto, y si no, igual lo pongo para hacer espacio en este comentario (no olvides darle like).
.
Este es un comentario para aquellos y aquellas estudiantes que sea su primera vez resolviendo este coding playground y evites auto spoilearte viendo las soluciones de la comunidad (por favor SIGAN compartiendo sus soluciones, nos fascina ver como lo hacen). A su vez, este comentario tendrá la explicación a este problema más abajo, abajo del gif random que siempre suelo poner por lo que ya sabes que esperar si haces más scroll
.
Momento random del día
.
Explicación
En este caso, no optamos por usar bucles. En su lugar fueron métodos propios de los arrays (para variar con las soluciones pero facilmente puede hacerse con un for o un while, for of, etc…)
export function getStudentAverage(students) {
// Creamos un array donde obtendremos los estudiantes con su promedio
const studentsWithAverage = students.map((student) => {
// separamos las notas en una sola variable para hacerlo más legible
const grades = student.grades;
// calculamos el promedio sumando todas las notas para dividirlas
// en el total de materias
const average =
grades.reduce((total, item) => total + item, 0) / grades.length;
return {
// Retornamos un objeto con el nombre del estudiante
name: student.name,
// Junto con su promedio a 2 decimales
// Es importante parsearlo con Number porque el método toFixed devuelve un string
average: Number(average.toFixed(2)),
};
});
// Después pasamos a hacer lo mismo pero obteniendo el promedio de la clase
const classAverage =
studentsWithAverage.reduce((total, student) => total + student.average, 0) /
studentsWithAverage.length;
// Sumamos todos los promedios y los dividimos entre el total de estudiantes
// Al final armamos un objeto que será el que retornaremos
const rta = {
// De igual manera pasamos el promedio de la clase a 2 decimales
classAverage: Number(classAverage.toFixed(2)),
students: studentsWithAverage,
};
// Y retornamos el objeto anterior
return rta;
}
Y ¡listo!
.
Si llegaste a esta parte de la lectura te comparto un fun fact, esta solución fue propuesta por el gran Nicobytes, mi solución era otra pero esta se ve más coqueta.
.
No olvides dejar tu corazoncito
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?