Enlace Patrocinado

Funciones prácticas que todo programador debería estar usando JavaScript

Enlace Patrocinado
Antes de proceder debemos conocer que son las high order functions, ya que las funciones que se repasarán en este artículo son precisamente eso. Existen muchas definiciones para este término pero lo que nos servirá entender en este momento es que las high order functions son funciones que pueden recibir como argumento otras funciones.
Algunas de las ventajas que yo le veo al uso de estas funciones es que:
  • Nos evitan escribir ciclos complejos = menos código.
  • Son declarativas = fáciles de leer.
  • Una vez dominadas, verás cómo tu productividad aumenta. 😉
En los siguientes ejemplos decidí usar como lenguaje principal JavaScript pero no dudo que en otros lenguajes existan también tales funciones para utilizar en arreglos.

Te puede interesar✔ Inscripciones del 1 al 30 de Enero

Map

Esta función se encarga de mapear los contenidos de un arreglo en otro, con la posibilidad de poder definir una función que pueda modificar o transformar los elementos originales del arreglo. Es decir, que nos regresa como resultado otro arreglo con los resultados individuales de la función que definimos para cada elemento.
const numbers = [1, 2, 3, 6, 12];
const halves = numbers.map((num) => num/2); // [0.5, 1, 1.5, 3, 6]
En el ejemplo de arriba se puede ver que utilicé una función anónima para lograr mi cometido que era reducir a la mitad cada número del arreglo.
Podemos usar también funciones como normalmente lo hacemos en JavaScript para poder colocar un bloque entero de código con más instrucciones.

const numbers = [1, 2, 3, 6, 12];
const halves = numbers.map(function(number){

const result = number/2;
return result;
}); //[0.5, 1, 1.5, 3, 6]

Filter

Cuando te interese descartar cierto tipo de contenido de una lista que no cumpla una cierta condición, esta es la función indicada. Filter recorre cada elemento de un arreglo buscando coincidencias a una cierta condición, la cual debe regresar “cierto” o “falso” para poder determinar si el elemento se preserva o se descarta en el arreglo resultante.
const alumni = [ 
{name: "Lizza", grade: 9.5},
{name: "Carlos", grade: 5},
{name: "Mickie", grade: 8.75}
{name: "Bryan", grade: 6.15}
]
function getPassingStudents(student) {
return student.grade >= 6;
}
const passingStudents = alumni.filter(getPassingStudents)// [ { name: 'Lizza', grade: 9.5 },
// { name: 'Mickie', grade: 8.75 },
// { name: 'Bryan', grade: 6.15 } ]
Este ejemplo esta un poco más detallado en el sentido de que se está usando un arreglo ya no de números o cadenas de texto, sino de objetos. Pero no se dejen sorprender, a grandes rasgos sigue el mismo principio de “filtrado”. La función de filter va a recorrer cada objeto aplicando la función de getPassingStudents y comprobando que el campo de grade sea mayor a 6 para tener una calificación aprobatoria. Cualquier objeto que no cumpla con esta condición será descartado y no se agregará al arreglo resultante.

Reduce

Este puede ser un poco más confuso que los anteriores y su uso no es tan común, pero aprender a usarlo te ahorrará más que un par de líneas de código y claro hará que tu código quede uff… ¡Elegantísimo! 💯
Dato curioso, hace ya tiempo me topé con una conferencia de la JSConf del 2016 donde Anjana Vakil hace una comparación de este método con algo tan cotidiano como lo es hacer un sándwich 🥪

https://www.datasciencecentral.com/forum/topics/what-is-map-reduce

Esta función pasa por cada elemento de un arreglo lo que nos deja procesar su contenido, pero no “mapea” cada elemento individualmente en otro arreglo como lo hacen map o filter, sino que al final de cada iteración los agrega a una variable que funciona como un acumulador y ese acumulador se pasa a la siguiente iteración como un argumento aparte. Al final, el resultado no despliega el arreglo sino el resultado que le cargamos al acumulador durante las iteraciones con los elementos del arreglo.
const myGrades = [84, 88, 87, 79, 82, 93, 99]; // these are all real😅const average =
myGrades.reduce((acc, grade) => acc + grade, 0) / myGrades.length;
// 87.42857142857143
El primer argumento de un reduce es la función que vamos a utilizar para procesar el acumulador y cada elemento individual. El segundo argumento es el valor inicial del acumulador.
En este caso estamos buscando el promedio o la media de mis calificaciones de mi primer semestre en la Universidad. 😙 


El acumulador lo inicializamos en cero y sumamos todo el contenido del arreglo para obtener un único resultado (o sea, el total). Una vez obtenido ese resultado hacemos la división con el número de calificaciones por materia. Así es como tenemos, (en una sola línea de código) un método que podríamos utilizar para promediar cualquier arreglo de números.
Dentro de JavaScript hay muchas otras funciones tipo high order para arreglos que vienen como parte de ES6 como lo son find o findIndex, te invito a echarles un vistazo y verás cómo muy pronto tu código hablará por sí solo. 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *