$('button').click(function () {
[1, 2, 3, 4, 5].forEach(function (n) {
if (n == 3) {
// it should break out here and doesn't alert anything after
return false
}
alert(n)
})
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click me</button>
Ma question: Pourquoi le numéro suivant est-il toujours alerté alors que j'appelle return
? Juste comme: Ignorez le code ci-dessous et continuez avec l'élément suivant
Depuis le Mozilla Developer Network :
Il n’ya 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()
n'est pas le bon outil.La résiliation anticipée peut être réalisée avec:
- Une simple boucle
- A
for
...of
boucleArray.prototype.every()
Array.prototype.some()
Array.prototype.find()
Array.prototype.findIndex()
Les autres méthodes Array:
every()
,some()
,find()
, etfindIndex()
tester les éléments du tableau avec un prédicat renvoyant un valeur de vérité pour déterminer si une itération supplémentaire est requise.
return
quitte la fonction actuelle , mais les itérations se poursuivent, vous obtenez donc le "prochain" élément qui ignore le if
et alerte le 4 ...
Si vous devez arrêter la mise en boucle, vous devez simplement utiliser une simple boucle for
comme ceci:
$('button').click(function () {
var arr = [1, 2, 3, 4, 5];
for(var i = 0; i < arr.length; i++) {
var n = arr[i];
if (n == 3) {
break;
}
alert(n);
})
})
Vous pouvez en savoir plus sur js break & continue ici: http://www.w3schools.com/js/js_break.asp