javascript - how - ¿Cuál es la diferencia entre.map,.every y.forEach?
map javascript (3)
Siempre me he preguntado cuál era la diferencia entre ellos. Todos parecen hacer lo mismo ...
La diferencia está en los valores de retorno.
.map()
devuelve una nueva matriz de objetos creados al realizar alguna acción en el elemento original.
.every()
devuelve un valor booleano : verdadero si cada elemento de esta matriz cumple la función de prueba provista. Una diferencia importante con .every()
es que la función de prueba no siempre se puede invocar para cada elemento de la matriz. Una vez que la función de prueba devuelve falso para cualquier elemento, no se iteran más elementos de la matriz. Por lo tanto, la función de prueba generalmente no debería tener efectos secundarios .
.forEach()
no devuelve nada : itera la matriz que realiza una acción determinada para cada elemento de la matriz.
Editar: aquí está el MSDN Docs si lo prefiere.
La respuesta de gilly3 es genial. Solo quería agregar un poco de información sobre otros tipos de funciones de "bucle a través de elementos".
-
.every()
(deja de bucle la primera vez que el iterador devuelve false o algo falsey) -
.some()
(detiene el bucle la primera vez que el iterador devuelve verdadero o algo que es verdad) -
.filter()
(crea una nueva matriz que incluye elementos donde la función de filtro devuelve verdadero y omite los que devuelven falso) -
.map()
(crea una nueva matriz a partir de los valores devueltos por la función del iterador) -
.reduce()
(crea un valor al invocar repetidamente el iterador, pasando valores previos, ver la especificación de los detalles, útil para sumar el contenido de una matriz y muchas otras cosas) -
.reduceRight()
(como reducir, pero funciona en orden descendente en vez de ascendente)
crédito a: TJCrowder For-each sobre una matriz en JavaScript?
Otra consideración a las grandes respuestas anteriores es el encadenamiento. Con forEach () no puedes encadenar, pero con map (), puedes.
Por ejemplo:
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
con .forEach (), no puede hacer el .sort (), obtendrá un error.