web-dev-qa-db-fra.com

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 ...

107
0x499602D2

La différence réside dans les valeurs de retour.

.map() retourne un nouveau tableau d'objets créé en effectuant une action sur l'élément d'origine.

.every() renvoie un booléen - true 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 peut ne pas toujours être appelée pour chaque élément du tableau. Une fois que la fonction de test retourne false pour n'importe quel élément, plus aucun élément de tableau n'est itéré. Par conséquent, la fonction de test ne devrait généralement pas avoir effets secondaires .

.forEach() ne renvoie rien - Itère le tableau effectuant une action donnée pour chaque élément du tableau.

Lisez à propos de ceux-ci et de nombreux autres méthodes d'itération de tableau sur MDN .

207
gilly3

la réponse de gilly3 est excellente. Je voulais juste ajouter un peu d'informations sur d'autres types de fonctions de "bouclage d'éléments".

  • .every() (arrête la boucle la première fois que l'itérateur retourne false ou quelque chose de falsey)
  • .some() (arrête la boucle la première fois que l'itérateur retourne vrai ou quelque chose de vrai)
  • .filter() (crée un nouveau tableau comprenant des éléments où la fonction de filtre retourne vrai et en omettant ceux où elle retourne faux)
  • .map() (crée un nouveau tableau à partir des valeurs renvoyées par la fonction itérateur)
  • .reduce() (construit une valeur en appelant répétitivement l'itérateur, en passant 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 réduire, mais fonctionne dans l'ordre décroissant plutôt que croissant)

crédit à: T.J.Crowder pour chacun sur un tableau en JavaScript?

80
raphaelgontijolopes

Une autre considération pour les grandes réponses ci-dessus est le chaînage. Avec forEach (), vous ne pouvez pas chaîner, mais avec map (), vous 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.

5
Nadine Rose

Pour Ramda , la différence entre R.map() et R.forEach() est:

  1. R.forEach() renvoie le tableau d'origine tandis que R.map() renvoie un foncteur
  2. R.forEach() ne peut fonctionner que sur un tableau mais R.map() peut également fonctionner sur un objet (c'est-à-dire que les paires clé/valeur de l'objet sont traitées comme un tableau)
0
Michael Osofsky