1+ /*
2+ * EJERCICIO:
3+ * Explora el concepto de funciones de orden superior en tu lenguaje
4+ * creando ejemplos simples (a tu elección) que muestren su funcionamiento.
5+ *
6+ * DIFICULTAD EXTRA (opcional):
7+ * Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
8+ * lista de calificaciones), utiliza funciones de orden superior para
9+ * realizar las siguientes operaciones de procesamiento y análisis:
10+ * - Promedio calificaciones: Obtiene una lista de estudiantes por nombre
11+ * y promedio de sus calificaciones.
12+ * - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
13+ * que tienen calificaciones con un 9 o más de promedio.
14+ * - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
15+ * - Mayor calificación: Obtiene la calificación más alta de entre todas las
16+ * de los alumnos.
17+ * - Una calificación debe estar comprendida entre 0 y 10 (admite decimales).
18+ */
19+
20+ const devolverFuncion = ( ) => {
21+
22+ const sum = ( num1 , num2 ) => num1 + num2 ;
23+
24+ return sum ;
25+ }
26+
27+ const funcionDevuelta = devolverFuncion ( ) ;
28+
29+ console . log ( funcionDevuelta ( 1 , 1 ) ) ;
30+
31+ console . log ( '----------DIFICULTAD EXTRA---------' ) ;
32+
33+ let estudiantes = [
34+ {
35+ nombre : 'Grace' ,
36+ fechaNacimiento : '27/07/1999' ,
37+ calificaciones : [ 10 , 9 , 8.5 ]
38+ } ,
39+ {
40+ nombre : 'Cate' ,
41+ fechaNacimiento : '12/08/1999' ,
42+ calificaciones : [ 9 , 6 ]
43+ } ,
44+ {
45+ nombre : 'Valeria' ,
46+ fechaNacimiento : '24/04/2007' ,
47+ calificaciones : [ 9.9 , 7 ]
48+ } ,
49+ ] ;
50+
51+ const getExpediente = ( calcularPromedio , getMejoresEstudiantes , orderEstudiantesByBirth , getMayorNota ) => {
52+
53+ console . log ( 'Promedios: ' , calcularPromedio ( ) ) ;
54+ console . log ( 'Mejores estudiantes' , getMejoresEstudiantes ( ) ) ;
55+ console . log ( 'Nacimientos' , orderEstudiantesByBirth ( ) ) ;
56+ console . log ( 'Mayor nota' , getMayorNota ( ) ) ;
57+ }
58+
59+ const calcularPromedio = ( ) => {
60+ let promedios = { } ;
61+
62+ estudiantes . forEach ( estudiante => {
63+ let suma = 0 ;
64+ estudiante . calificaciones . forEach ( cal => suma += cal ) ;
65+ let promedio = suma / estudiante . calificaciones . length ;
66+
67+ let nombre = estudiante . nombre ;
68+ promedios [ nombre ] = promedio ;
69+ } ) ;
70+
71+ return promedios ;
72+ }
73+
74+ const getMejoresEstudiantes = ( ) => {
75+ const promedios = calcularPromedio ( ) ;
76+
77+ const mejoresEstudiantes = Object . entries ( promedios ) . filter ( ( [ nombre , promedio ] ) => promedio > 9 ) ;
78+ const resultado = Object . fromEntries ( mejoresEstudiantes ) ;
79+
80+ return resultado ;
81+ }
82+
83+ const orderEstudiantesByBirth = ( ) => {
84+
85+ return estudiantes . sort ( ( a , b ) => new Date ( a . fechaNacimiento ) - new Date ( b . fechaNacimiento ) ) ;
86+ }
87+
88+ const getMayorNota = ( ) => {
89+
90+ return Math . max ( ...estudiantes . flatMap ( estudiante => estudiante . calificaciones ) )
91+ }
92+
93+ getExpediente ( calcularPromedio , getMejoresEstudiantes , orderEstudiantesByBirth , getMayorNota ) ;
0 commit comments