web-dev-qa-db-fra.com

javascript sortie de la boucle sans retour

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?

44
frenchie

Vous recherchez l'instruction break .

85
SLaks

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(); 
} 
10
Chris Gessler

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.

7
Spudley

Break - rompt toute la boucle. Continuer - saute une étape dans une boucle. Il saute donc le code ci-dessous continue;

4
Erik Häggqvist

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();

}
1
mariogarranz

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;
   }
}
1
Riël