Inyección de funciones

Ya te comenté en este pequeñísimo artículo que las funciones tratadas como objetos de primera clase es una de las características que permiten programar con Javascript de un modo funcional. Esto nos permite, por ejemplo, pasar funciones como argumentos de otras funciones, y ahí es donde se produce la inyección de funciones que da título a este artículo.

La función sort nos permite mostrar un ejemplo de este concepto. A continuación la función sort en acción:

let people = ["Leonardo", "Rocío", "Athenea", "Javier"]; 
console.log(people.sort()); 
// [ "Athenea", "Javier", "Leonardo", "Rocío" ]

Como puedes ver en el ejemplo, en el momento de ordenar strings, atendiendo a su representación ASCII, funciona genial, pero ¿Y si queremos ordenar el siguiente array, que contiene objetos, basándonos en la edad de cada persona?

let people = [ 
  { Nombre: "Leonardo", Edad: 4 }, 
  { Nombre: "Rocío", Edad: 38 }, 
  { Nombre: "Athenea", Edad: 7 }, 
  { Nombre: "Javier", Edad: 40 } 
]; 
console.log(people.sort()); 
\* 
[ 
  { Nombre: "Leonardo", Edad: 4 }, 
  { Nombre: "Rocío", Edad: 38 }, 
  { Nombre: "Athenea", Edad: 7 }, 
  { Nombre: "Javier", Edad: 40 } 
] 
*/ 

Ahí nuestra función sort no está tan acertada, pero nos permite que le pasemos como parámetro una función que decidirá, en el momento de comparar dos elementos del array, cual es el orden correcto.

let people = [
  { Nombre: "Leonardo", Edad: 4 },
  { Nombre: "Rocío", Edad: 38 },
  { Nombre: "Athenea", Edad: 7 },
  { Nombre: "Javier", Edad: 40 }
];
console.log(people.sort((a, b) => a.Edad - b.Edad));
\*
[
  { Nombre: "Leonardo", Edad: 4 },
  { Nombre: "Athenea", Edad: 7 },
  { Nombre: "Rocío", Edad: 38 },
  { Nombre: "Javier", Edad: 40 }
]
*/