125 votes

Quelle est la différence entre .map, .every et .forEach ?

Je me suis toujours demandé quelle était la différence entre eux. Ils semblent tous faire la même chose...

6 votes

Quelqu'un a ajouté un tag jQuery... considérant every y forEach 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.6

0 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 ?

239voto

gilly3 Points 33285

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 .

0 votes

Alternativement, le MDN pourrait être cité

3 votes

@josh - J'ai cité MDN. Chaque nom de méthode est lié à sa documentation correspondante sur MDN.

0 votes

@gilly3, mes excuses, j'ai négligé le texte bleu >.>

92voto

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 ?

0 votes

Obtenez 100 likes de moi !

6voto

Nadine Rose Points 61

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.

1voto

AndW Points 61

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/

http://www.suburban-glory.com/blog?page=150

0voto

Michael Osofsky Points 149

Para Ramda la différence entre R.map() y R.forEach() est :

  1. R.forEach() retourne le tableau original alors que R.map() renvoie un foncteur
  2. R.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)

0 votes

La question est liée au langage Javascript. Ramda, bien qu'excellent, est un sujet entièrement différent et une bibliothèque.

Prograide.com

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.

Powered by:

X