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