3 choses que vous ne saviez pas sur la boucle forEach en JS
Pensez-vous savoir exactement comment fonctionne la boucle forEach
en JS?
Eh bien, c’étaient mes pensées jusqu’à récemment: « juste une boucle for
régulière où vous pouvez facilement utiliser break
ou return
ou continue
« .
Aujourd’hui, je vais vous montrer 3 choses que vous ne saviez peut-être pas sur la boucle forEach
.
Pensez-vous que le code ci-dessous imprimerait 1 2
puis s’arrêterait?
array = ;array.forEach(function (element) {
console.log(element);
if (element === 2)
return;
});// Output: 1 2 3 4
Non, ce ne sera pas le cas. Si vous venez d’un milieu Java, vous vous demanderiez probablement comment est-ce possible?
La raison en est que nous transmettons une fonction de rappel dans notre fonction forEach
, qui se comporte comme une fonction normale et est appliquée à chaque élément, peu importe si nous return
d’un, c’est-à-dire lorsque l’élément est 2 dans notre cas.
À partir des documents officiels MDN:
Il n’y a aucun moyen d’arrêter ou de casser une boucle
forEach()
autrement qu’en lançant une exception. Si vous avez besoin d’un tel comportement, la méthodeforEach()
est le mauvais outil.
Réécrivons le code d’en haut:
const array = ;const callback = function(element) {
console.log(element);
if (element === 2)
return; // would this make a difference? no.
}for (let i = 0; i < array.length; i++) {
callback(array);
}// Output: 1 2 3 4
L’instruction return
ne fera aucune différence, car nous appliquons la fonction à chaque élément à chaque itération, donc peu importe si vous êtes sorti une fois, c’est-à-dire lorsque l’élément est 2.
Vous ne pouvez pas « casser »
Pensez-vous qu’une boucle forEach
serait break
dans l’exemple ci-dessous?
const array = ;array.forEach(function(element) {
console.log(element);
if (element === 2)
break;
});// Output: Uncaught SyntaxError: Illegal break statement
Non, il ne s’exécutera même pas car l’instruction break
n’est techniquement pas en boucle.
Solution ?
Utilisez simplement une boucle normale for
. Personne ne se moquerait de toi.
const array = ;for (let i = 0; i < array.length; i++) {
console.log(array);
if (array === 2)
break;
}// Output: 1 2
Vous ne pouvez pas « continuer »
Vous attendez-vous à ce que le code ci-dessous ignore l’impression de 2
sur la console et affiche uniquement 1 3 4
?
const array = ;array.forEach(function (element) {
if (element === 2)
continue;
console.log(element);
});// Output: Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement
Non, il ne s’exécutera même pas car l’instruction continue
n’est pas en boucle, similaire à l’instruction break
.
Solution ?
Utilisez simplement à nouveau une boucle normale for
.
for (let i = 0; i < array.length; i++) {
if (array === 2)
continue;
console.log(array);
}// Output: 1 3 4
C’était tout! J’espère que vous avez appris quelque chose de nouveau aujourd’hui.