J'ai une boucle for que je veux quitter comme ceci:
function MyFunction() {
for (var i = 0; i < SomeCondition; i++) {
if (i === SomeOtherCondition) {
// Do some work here.
return false;
}
}
// Execute the following code after breaking out of the for loop above.
SomeOtherFunction();
}
Le problème est qu'après le // Do some work here.
les instructions s'exécutent, je veux quitter la boucle for mais je veux quand même exécuter le code en dessous de la boucle for entière (tout en dessous // Execute the following code after breaking out of the for loop above.
).
Le return false
l'instruction quitte la boucle for mais elle quitte également la fonction entière. Comment puis-je réparer ça?
Vous recherchez l'instruction break
.
Utilisez une instruction break ou continue
function MyFunction() {
for (var i = 0; i < SomeCondition; i++) {
if (i === SomeOtherCondition) {
// Do some work here
break;
}
}
SomeOtherFunction();
SomeOtherFunction2();
}
Ou pour continuer à traiter les articles, sauf ceux en état
function MyFunction() {
for (var i = 0; i < SomeCondition; i++) {
if (i != SomeOtherCondition) continue;
// Do some work here
}
SomeOtherFunction();
SomeOtherFunction2();
}
Plusieurs personnes ont proposé break
comme solution, et c'est en effet la meilleure réponse à la question.
Cependant, juste pour être complet, je pense que je devrais également ajouter que la question pourrait être résolue tout en conservant l'instruction return
, en enveloppant le contenu de la condition if()
dans une fonction de fermeture:
function MyFunction() {
for (var i = 0; i < SomeCondition; i++) {
if (i === SomeOtherCondition) {
function() {
// Do some work here
return false;
}();
}
}
SomeOtherFunction();
SomeOtherFunction2();
}
Comme je l'ai dit, break
est probablement une meilleure solution dans ce cas, car c'est la réponse directe à la question et la fermeture introduit certains facteurs supplémentaires (tels que la modification de la valeur de this
, limitant la portée des variables introduites dans la fonction, etc.). Mais cela vaut la peine d'être offert comme solution, car c'est une technique précieuse à apprendre, sinon nécessairement à utiliser dans cette occasion particulière, puis certainement pour l'avenir.
Break - rompt toute la boucle. Continuer - saute une étape dans une boucle. Il saute donc le code ci-dessous continue;
OK, c'est peut-être un vieux sujet, mais après avoir lu toutes les réponses, je me demande pourquoi est-ce que personne n'a suggéré d'utiliser une boucle while à la place?
Je suppose qu'en JavaScript, vous pouvez rompre une boucle for (ce que vous ne pouvez pas faire dans de nombreuses autres langues, ou est considéré comme une mauvaise pratique), mais je n'utiliserais toujours les boucles for que pour les situations où vous souhaitez itérer la boucle une quantité fixe de fois.
Ce serait ma suggestion:
function MyFunction() {
var i = 0,
breakLoop = false;
while (i < SomeCondition && !breakLoop) {
if (i === SomeOtherCondition) {
breakLoop = true;
}
i++;
}
SomeOtherFunction();
SomeOtherFunction2();
}
La définition de la variable i sur la valeur de condition serait-elle un bon moyen?
for (var i=0; i<SomeCondition; i++) {
if (data[i]===true) {
//do stuff
i=SomeCondition;
}
}