Je me suis toujours demandé quelle était la différence entre eux. Ils semblent tous faire la même chose...
Alternativement, le MDN pourrait être cité
Je me suis toujours demandé quelle était la différence entre eux. Ils semblent tous faire la même chose...
La différence réside dans les valeurs de retour.
.map()
renvoie un nouveau tableau d'objets créé par une action sur l'élément original.
.every()
renvoie un booléen - vrai si chaque élément de ce tableau satisfait à la fonction de test fournie. Une différence importante avec .every()
est que la fonction de test ne peut pas toujours être appelée pour chaque élément du tableau. Une fois que la fonction de test renvoie false pour un élément, aucun autre élément du tableau n'est itéré. Par conséquent, la fonction de test ne devrait généralement pas avoir de effets secondaires .
.forEach()
ne renvoie rien - Il itère le tableau en effectuant une action donnée pour chaque élément du tableau.
Lisez ce qui suit et les nombreuses autres Méthodes d'itération des tableaux sur MDN .
@josh - J'ai cité MDN. Chaque nom de méthode est lié à sa documentation correspondante sur MDN.
La réponse de gilly3 est excellente. Je voulais juste ajouter un peu d'information sur les autres types de fonctions "loop through elements".
.every()
(arrête la boucle la première fois que l'itérateur renvoie false ou quelque chose de faux).some()
(arrête la boucle la première fois que l'itérateur renvoie vrai ou quelque chose de véridique).filter()
(crée un nouveau tableau incluant les éléments où la fonction filtre renvoie vrai et en omettant ceux où elle renvoie faux).map()
(crée un nouveau tableau à partir des valeurs retournées par la fonction iterator ).reduce()
(construit une valeur en appelant de manière répétée l'itérateur, en passant par les valeurs précédentes ; voir la spécification pour les détails ; utile pour additionner le contenu d'un tableau et bien d'autres choses).reduceRight()
(comme reduce, mais fonctionne par ordre décroissant plutôt que par ordre ascendant)crédit à : T.J.Crowder For-each sur un tableau en JavaScript ?
Le chaînage est un autre aspect à prendre en compte pour les réponses ci-dessus. Avec forEach(), vous ne pouvez pas enchaîner, mais avec map(), vous le pouvez.
Par exemple :
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
avec .forEach(), vous ne pouvez pas faire le .sort(), vous obtiendrez une erreur.
Il vaut la peine de lire cet article sur le site dev Opera pour une explication approfondie des méthodes de l'objet tableau EMCAScript 5 :
http://dev.opera.com/articles/view/javascript-array-extras-in-detail/
Para Ramda la différence entre R.map()
y R.forEach()
est :
R.forEach()
retourne le tableau original alors que R.map()
renvoie un foncteurR.forEach()
ne peut fonctionner que sur un tableau mais R.map()
peut également opérer sur un objet (c'est-à-dire que les paires clé/valeur de l'objet sont traitées comme un tableau) Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
6 votes
Quelqu'un a ajouté un tag jQuery... considérant
every
yforEach
ne sont pas des méthodes jQuery, je pense qu'il est peu probable que la question soit liée à jQuery de quelque manière que ce soit. developer.mozilla.org/fr/JavaScript/New_in_JavaScript/1.60 votes
Je pense que ce lien devrait avoir la réponse que vous cherchez.
0 votes
Ai-je raison de penser que vous faites référence aux nouvelles méthodes de tableau spécifiques à Mozilla, telles que détaillées dans le lien de mon commentaire précédent ?
0 votes
@James - Ceux-ci ne sont pas spécifiques à Mozilla . Je partagerais bien un lien vers les documents de webkit et d'opera, mais je ne sais pas où ils se trouvent.
0 votes
@gilly3 - Ahh, bon point. Je crois qu'ils ne sont supportés que dans IE9 cependant, pas en dessous.
0 votes
@James - Oui, c'est vrai, malheureusement. J'inclus généralement un script qui ajoute ces méthodes pour les navigateurs plus anciens en utilisant les implémentations sur MDN listées sous "Compatibilité" :
.map()
,.every()
,.forEach()
0 votes
@JamesAllardice : Ils figurent dans la norme ECMA-262 ; tous les navigateurs ne prennent pas encore en charge tout ce qui figure dans cette norme.