Siempre que avanzo en las clases de los cursos de JavaScript, noto que en el momento en que dejo los loop convencionales y paso a un forEach, varios alumnos se pierden un poco al principio y la idea de esta publicación es eternizar esta explicación en texto, ayudando tanto a los que son mis alumnos o alumnas, como a ti que puedes estar con esta duda ahora.
Si toma los 3 códigos a continuación, todos tendrán el mismo retorno en el navegador.
const nombres = ['Whinds', 'Freeway', 'Test', 'Maria'];
for(let i = 0; i < nombres.length; i = i + 1 ) {
console.log('[for]', nombres[i]);
}
const nombres = ['Whinds', 'Freeway', 'Test', 'Maria'];
nombres.forEach(function(nombre, i) {
console.log('[forEach]', nombre, i);
})
const nombres = ['Whinds', 'Freeway', 'Test', 'Maria'];
nombres.map(function(nombre, i) {
console.log('[forEach]', nombre, i);
})
Al principio, puedes asumir que si el resultado es el mismo, hacen lo mismo. Pero está claro si miramos un poco el forEach
y el map
que aquí no tenemos que preocuparnos con una variable de índice (que solemos llamar i), que sirve para controlar el looping ya que es un elemento que normalmente se incrementa o disminuye. Sin embargo, es fácil notar que, si bien no lo escribimos, este dato es accesible para nosotros solo esta vez lo recibimos como argumento de la función que pasamos al forEach
y al map
. Para aclarar esto, echemos un vistazo a una posible implementación de forEach.
La implementación no funciona en el modelo array.map y *array.forEach*, para eso tendríamos que lidiar con prototype y solo eso ya rinde una publicación.
Anteriormente vimos que forEach pasa por todos los elementos de un array, al igual que el loop for normal, esto se debe a que internamente tiene un lop for. Si fuéramos a implementarlo, se vería como el siguiente código:
function nossoForEach(arr, funcion) {
for(let i = 0; i < arr.length; i = i + 1) {
funcion(arr[i], i);
}
}
nuestroForEach(['nombre', 'nombre2'], function(nombre, indice) {
console.log(nombre, indice)
})
Siempre que vaya a hacer un loop for, vale más la pena usar un forEach, ya que elimina la carga mental de tener que lidiar con variables de control y, por lo tanto, puede ayudar a que el código sea más fácil de leer, teniendo en cuenta que es una forma muy usada en el mundo JavaScript en general.
En la práctica, como vimos al principio de la publicación, el map y el forEach parecen hacer lo mismo, pero la diferencia viene cuando analizamos el retorno por lo que sale de ellos, la diferencia es clara.
const nombres = ['Whinds', 'Freeway', 'Test', 'Maria'];
const retornoForEach = nombres.forEach((nombreAtual) => {
console.log(nombreActual);
return nombreActual.toUpperCase();
})
console.log(retornoForEach) *// undefined*
const nombres = ['Whinds', 'Freeway', 'Test', 'Maria'];
const retornoMap = nombres.map((nombreActual) => {
console.log(nombreActual);
return nombreActual.toUpperCase();
})
console.log(retornoMap) *// ['WHINDS', 'FREEWAY', 'TEST', 'MARIA']*
Si bien forEach se creó para ser una alternativa al loop for, el map se creó para realizar una operación de transformación / cambio en los elementos de una array y al final de estas operaciones para tener una nueva lista con la misma cantidad de elementos que la lista base.
Si tuviéramos que implementar el map, caeríamos en un código en esta línea:
function nuestroMap(arr, funcion) {
const nuevoArray = [];
for(let i = 0; i < arr.length; i = i + 1) {
nuevoArray.push(funcion(arr[i], i));
} return nuevoArray
}
nuestroMap(['nombre', 'nombre2'], function(nombre, indice) {
console.log(nombre, indice)
})
Esto nos facilita concatenar operaciones como hacer un map y unir con un filter, ya que el retorno del map es un array, podemos escribir un código en esta línea: .map()
.filter()
.
Eso es todo, espero que haya quedado claro que si solo queremos una forma más elegante de trabajar con for, usamos el .forEach
y si queremos transformar/cambiar valores o incluso concatenar operaciones en arrays el .map
es el más adecuado.
Si te interesa este tipo de contenido tienes que conferir los cursos de JavaScript en la plataforma de Alura Latam.
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Puedes realizar el pago de tus planes en moneda local en los siguientes países:
País | |||||||
---|---|---|---|---|---|---|---|
Plan Semestral |
487.37
BOB |
69289.36
CLP |
307472.10
COP |
65.90
USD |
264.35
PEN |
1435.53
MXN |
2978.57
UYU |
Plan Anual |
738.82
BOB |
105038.04
CLP |
466107.17
COP |
99.90
USD |
400.74
PEN |
2176.17
MXN |
4515.32
UYU |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana