Sé que hubo muchos temas como este. Y conozco lo básico: .forEach()
funciona en la matriz original y .map()
en la nueva.
En mi caso:
function practice (i){
return i+1;
};
var a = [ -1, 0, 1, 2, 3, 4, 5 ];
var b = [ 0 ];
var c = [ 0 ];
console.log(a);
b = a.forEach(practice);
console.log("=====");
console.log(a);
console.log(b);
c = a.map(practice);
console.log("=====");
console.log(a);
console.log(c);
Y esta es la salida:
[ -1, 0, 1, 2, 3, 4, 5 ]
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
undefined
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
[ 0, 1, 2, 3, 4, 5, 6 ]
No puedo entender por qué el uso practice
cambia el valor de b
a undefined
.
Lo siento si esta es una pregunta tonta, pero soy bastante nuevo en este idioma y las respuestas que encontré hasta ahora no me satisfacen.
javascript
arrays
loops
foreach
DzikiChrzan
fuente
fuente
.map
devuelve una nueva matriz , mientras.forEach
que no devuelve nada . Básicamente, si desea obtener una forma modificada de la matriz anterior, use.map
, si no lo desea, use.forEach
.Respuestas:
No son lo mismo. Déjame explicarte la diferencia.
forEach
: Esto itera sobre una lista y aplica alguna operación con efectos secundarios a cada miembro de la lista (ejemplo: guardar cada elemento de la lista en la base de datos)map
: Esto itera sobre una lista, transforma cada miembro de esa lista y devuelve otra lista del mismo tamaño con los miembros transformados (ejemplo: transformar la lista de cadenas a mayúsculas)Referencias
Array.prototype.forEach () - JavaScript | MDN
Array.prototype.map () - JavaScript | MDN
fuente
Array.forEach
"Ejecuta una función proporcionada una vez por elemento de matriz".Array.map
"Crea una nueva matriz con los resultados de llamar a una función proporcionada en cada elemento de esta matriz".Entonces, en
forEach
realidad no devuelve nada. Simplemente llama a la función para cada elemento de la matriz y luego está listo. Entonces, todo lo que devuelva dentro de esa función llamada simplemente se descarta.Por otra parte,
map
llamará de manera similar a la función para cada elemento de la matriz, pero en lugar de descartar su valor de retorno, lo capturará y creará una nueva matriz de esos valores de retorno.Esto también significa que puede usar
map
donde sea que esté usando,forEach
pero aún así no debe hacerlo para no recopilar los valores de retorno sin ningún propósito. Es más eficiente no recolectarlos si no los necesita.fuente
forEach
hubiera "sido más eficiente" que,map
especialmente, si se requiriera un polyfill para soportarforEach
un navegador más antiguo (IE8 o 9). No es necesario asignar la devolución demap
a nada; el valor de retorno debe recolectarse la basura inmediatamente después de lasmap
devoluciones cuandomap
no se asigna la devolución de .forEach
lo tanto , conceptualmente seguirá siendo más eficiente y más adecuado para tareas en las que no necesita recopilar resultados. Y no sé ustedes, pero en 2015, ya no estaba desarrollando para IE8 (que por cierto tampoco era compatiblemap
); y soporte IE9 +forEach
. Y de hecho, un mes después de mi respuesta, Microsoft dejó de ofrecer soporte para esos navegadores.map
yforEach
llamadas sólo regresarán una vez que todo el conjunto se ha enrollado a través de la devolución de llamada y ha sido llamado para cada uno.fuente
La principal diferencia que debe saber es que
.map()
devuelve una nueva matriz, mientras.forEach()
que no. Es por eso que ves esa diferencia en la salida..forEach()
simplemente opera en todos los valores de la matriz.Leer:
Array.prototype.forEach()
- JavaScript | MDNArray.prototype.map()
- JavaScript | MDNEs posible que también desee consultar: -
Array.prototype.every()
- JavaScript | MDNfuente
forEach: si desea realizar una acción sobre los elementos de una matriz y es la misma que usa para el bucle. El resultado de este método no nos da una salida de compra, solo recorre los elementos.
map: si desea realizar una acción en los elementos de una matriz y también desea almacenar la salida de su acción en una matriz. Esto es similar al bucle for dentro de una función que devuelve el resultado después de cada iteración.
Espero que esto ayude.
fuente
La diferencia radica en lo que devuelven. Después de la ejecución:
devuelve una matriz de elementos resultantes de la función procesada; mientras:
devuelve indefinido.
fuente
Análisis de rendimiento Los bucles For funcionan más rápido que map o foreach a medida que aumenta el número de elementos en una matriz.
fuente
map: 1642ms forEach: 885ms for: 748ms
Diferencia entre Foreach y mapa:
Map () : si usa map, map puede devolver una nueva matriz iterando la matriz principal.
Foreach () : si usa Foreach, entonces no puede devolver nada por cada lata que itera la matriz principal.
useFul link : use este enlace para comprender la diferencia
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
fuente
Una cosa a señalar es que foreach omite valores no inicializados mientras que map no lo hace.
fuente
forEach () simplemente recorre los elementos. Elimina los valores devueltos y siempre devuelve indefinidos. El resultado de este método no nos da una salida.
map () recorre los elementos asigna memoria y almacena valores de retorno iterando la matriz principal
Ejemplo:
fuente
Map devuelve implícitamente mientras que forEach no lo hace.
Es por eso que cuando estás codificando una aplicación JSX, casi siempre usas map en lugar de forEach para mostrar contenido en React .
fuente
forEach () :
valor de retorno: indefinido
originalArray: modificado después de la llamada al método
mapa () :
valor de retorno: nueva matriz poblada con los resultados de llamar a una función proporcionada en cada elemento de la matriz de llamada
originalArray: no modificado después de la llamada al método
fuente