2013-03-25 3 views
6

Questa è una domanda teorica per comprendere quanti escape (ritorno o uscita) possono applicare a cicli nidificati o altri controlli e funzioni.Come uscire (uscire) da una funzione per ciclo al suo interno?

ho confuso su questo, perché io sono bloccato nel codice How to escape from for ... each loop and method at the same time?

non riesco a smettere l'iterazione di option s in select elemento.

Ho provato già return e return false, ma non ci sono riuscito.

Generalmente come possiamo farlo?

function() { 
    for (...) { 
     if (...) { 
      $(...).each(function() { 
       // You have to exit outer function from here 
      }); 
     } 
    } 
} 
+0

Che lingua stai usando? php? –

+0

a giudicare dal link nel suo post, direi jquery –

+0

Sorry @Evan javascript. – caglaror

risposta

7

utilizzare una variabile condivisa tra i passanti. Passare a true alla fine del ciclo each() se si desidera uscire e alla fine del for-loop verificare che sia true. Se sì, rompere.

+0

Sì @ Konstantin D questo risolverà il mio problema. Ma dovremmo dire che non esiste una soluzione diretta a questo? – caglaror

+2

@caglaror direi di si. –

-3

Come nella maggior parte delle lingue. La parola chiave per uscire da un ciclo è break; Maggiori informazioni qui: http://www.w3schools.com/js/js_break.asp

+0

Basta chiedersi all'elettore in basso? Cosa c'è di sbagliato nella mia risposta? –

+0

se il punto di cui ho scritto il commento ci 'rompe;' il codice che ha detto break è illegale in quel punto. – caglaror

+0

Non so se ti rendi conto, ma 'per each()' non è un codice javascript. Almeno non che io sappia di –

1

vorrei fare in questo modo:

  • Creare una variabile booleana per controllare ogni ciclo, e se la variabile è true, quindi esci dal ciclo (fallo per ognuno).

    var exitLoop = false; 
    
    $(sentences).each(function() { 
        if(exitLoop) {return;} 
        var s = this; 
        alert(s); 
        $(words).each(function(i) { 
        if(exitLoop) {return;} 
         if (s.indexOf(this) > -1) 
         { 
          alert('found ' + this); 
          throw "Exit Error"; 
         } 
        }); 
    }); 
    

Nota questo non è l'uso corretto di un try-catch come try-catch deve rigorosamente essere utilizzato per la gestione degli errori, non saltare alle diverse sezioni del codice - ma funzionerà per quello che stai facendo.

Se return non sta facendo per voi, provare a utilizzare un codice try-catch

try{ 
$(sentences).each(function() { 
    var s = this; 
    alert(s); 
    $(words).each(function(i) { 
     if (s.indexOf(this) > -1) 
     { 
      alert('found ' + this); 
      throw "Exit Error"; 
     } 
    }); 
}); 
} 
catch (e) 
{ 
    alert(e) 
} 

tratto da this answer

+0

Questo codice funziona correttamente, non c'è motivo per un downvote. Cura di spiegare? –

+1

Un try catch deve essere usato per la gestione degli errori, non per saltare a sezioni diverse di uno script. –

+0

@nalply Ho modificato, non so che cosa stai cercando di essere onesto –

1

È inoltre possibile uscire dal ciclo modificando il valore dell'iteratore.

var arr = [1,2,3,4,5,6,7,8,9,10]; 

for(var i = 0;i<arr.length;i++){ 

    console.log(i); 
    compute(i); 

    function compute(num){ 
    //break is illegal here 
    //return ends only compute function 
    if(num>=3) i=arr.length; 
    } 

} 
+0

Ma i cicli annidati? I loop interni continueranno a scorrere. – caglaror