Je sais qu'il y avait beaucoup de sujets comme celui-ci. Et je connais les bases: .forEach()
fonctionne sur le tableau d'origine et .map()
sur le nouveau.
Dans mon cas:
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);
Et voici la sortie:
[ -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 ]
Je ne comprends pas pourquoi utiliser practice
change la valeur de b
à undefined
.
Je suis désolé si c'est une question idiote, mais je suis assez nouveau dans cette langue et les réponses que j'ai trouvées jusqu'à présent ne m'ont pas satisfait.
javascript
arrays
loops
foreach
DzikiChrzan
la source
la source
.map
renvoie un nouveau tableau , alors que.forEach
ne renvoie rien . Fondamentalement, si vous souhaitez obtenir une forme modifiée du tableau précédent, vous utilisez.map
, si vous ne le souhaitez pas, vous utilisez.forEach
.Réponses:
Ce ne sont pas les mêmes. Laissez-moi vous expliquer la différence.
forEach
: Ceci itère sur une liste et applique une opération avec des effets secondaires à chaque membre de la liste (exemple: enregistrement de chaque élément de la liste dans la base de données)map
: Cela itère sur une liste, transforme chaque membre de cette liste, et retourne une autre liste de même taille avec les membres transformés (exemple: transformation de la liste de chaînes en majuscules)Références
Array.prototype.forEach () - JavaScript | MDN
Array.prototype.map () - JavaScript | MDN
la source
Array.forEach
"Exécute une fonction fournie une fois par élément du tableau."Array.map
"Crée un nouveau tableau avec les résultats de l'appel d'une fonction fournie sur chaque élément de ce tableau."Donc,
forEach
ne retourne rien. Il appelle simplement la fonction pour chaque élément du tableau, puis c'est fait. Donc, tout ce que vous retournez dans cette fonction appelée est simplement rejeté.D'autre part,
map
appellera de la même manière la fonction pour chaque élément du tableau, mais au lieu de rejeter sa valeur de retour, il la capturera et construira un nouveau tableau de ces valeurs de retour.Cela signifie également que vous pouvez utiliser
map
partout où vous utilisez,forEach
mais vous ne devriez toujours pas le faire afin de ne pas collecter les valeurs de retour sans aucun but. Il est simplement plus efficace de ne pas les collecter si vous n'en avez pas besoin.la source
forEach
cela aurait été "plus efficace" quemap
surtout si un polyfill devait être supportéforEach
sur un navigateur plus ancien (IE8 ou 9). Vous n'avez pas besoin d'attribuer le retour demap
à quoi que ce soit; la valeur de retour doit être récupérée immédiatement après lesmap
retours lorsque le retour demap
n'est pas affecté.forEach
sera donc conceptuellement plus efficace et mieux adapté aux tâches pour lesquelles vous n'avez pas besoin de collecter des résultats. Et je ne sais pas pour vous mais en 2015, je ne développais plus pour IE8 (qui d'ailleurs ne supportait pas non plusmap
); et prise en charge d'IE9 +forEach
. Et en fait, un mois après ma réponse, Microsoft a mis fin au support de ces navigateurs.map
et lesforEach
appels ne reviendront qu'une fois que tout le tableau aura été bouclé et que le rappel aura été appelé pour chacune.la source
La principale différence que vous devez savoir est que
.map()
retourne un nouveau tableau alors.forEach()
que non. C'est pourquoi vous voyez cette différence dans la sortie..forEach()
opère simplement sur chaque valeur du tableau.Lire:
Array.prototype.forEach()
- JavaScript | MDNArray.prototype.map()
- JavaScript | MDNVous pouvez également consulter: -
Array.prototype.every()
- JavaScript | MDNla source
forEach: si vous souhaitez effectuer une action sur les éléments d'un tableau et que c'est la même chose que vous utilisez pour la boucle. Le résultat de cette méthode ne nous donne pas une sortie acheter juste une boucle à travers les éléments.
map: si vous souhaitez effectuer une action sur les éléments d'un tableau et que vous souhaitez également stocker la sortie de votre action dans un tableau. Ceci est similaire à la boucle for dans une fonction qui renvoie le résultat après chaque itération.
J'espère que cela t'aides.
la source
La différence réside dans ce qu'ils retournent. Après exécution:
renvoie un tableau d'éléments résultant de la fonction traitée; tandis que:
renvoie undefined.
la source
Analyse des performances Les boucles For sont plus rapides que map ou foreach lorsque le nombre d'éléments dans un tableau augmente.
la source
map: 1642ms forEach: 885ms for: 748ms
Différence entre Foreach et la carte:
Carte() : Si vous utilisez map, map peut retourner un nouveau tableau en itérant le tableau principal.
Foreach () : Si vous utilisez Foreach, il ne peut rien renvoyer pour chaque tableau principal en cours d'itération.
lien useFul : utilisez ce lien pour comprendre la différence
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
la source
Une chose à souligner est que foreach ignore les valeurs non initialisées alors que la carte ne le fait pas.
la source
pour chaque() une boucle sur les éléments. Il jette les valeurs de retour et retourne toujours undefined.Le résultat de cette méthode ne nous donne pas de sortie.
map () boucle à travers les éléments alloue de la mémoire et stocke les valeurs de retour en itérant le tableau principal
Exemple:
la source
Map renvoie implicitement alors que forEach ne le fait pas.
C'est pourquoi lorsque vous codez une application JSX, vous utilisez presque toujours map au lieu de forEach pour afficher le contenu dans React .
la source
forEach () :
valeur de retour: non définie
originalArray: modifié après l'appel de la méthode
carte () :
valeur de retour: nouveau tableau rempli avec les résultats de l'appel d'une fonction fournie sur chaque élément du tableau appelant
originalArray: non modifié après l'appel de la méthode
la source