2013-03-25 27 views
6

To jest teoretyczne pytanie, aby zrozumieć, ile wyjść (powrót lub wyjście) może mieć zastosowanie do zagnieżdżonych pętli lub innych elementów sterujących i funkcji.Jak wyjść (uciec) z pętli for wewnątrz?

ja mylić o tym, bo siedzę w kodzie How to escape from for ... each loop and method at the same time?

nie mogę przestać iteracji ponad option sw select elementu.

Próbowałem już return i return false, ale jestem niepomyślny.

Ogólnie, jak możemy to zrobić?

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

W jakim języku się posługujesz? php? –

+0

sądząc po linku w jego poście, powiedziałbym jquery –

+0

Sorry @Evan javascript. – caglaror

Odpowiedz

7

użyć udostępnionego zmiennej pomiędzy pętlami. Przewiń go do true na końcu pętli each(), jeśli chcesz wyjść i na końcu testu for-loop, ponieważ jest to true. Jeśli tak, wyrwij się z tego.

+0

Tak @konstantin D to rozwiąże mój problem. Ale czy możemy powiedzieć, że nie ma na to bezpośredniego rozwiązania? – caglaror

+2

@caglaror Powiedziałbym tak. –

-3

Jak w większości języków. Słowo kluczowe, aby wyjść z pętli jest break; Więcej informacji tutaj: http://www.w3schools.com/js/js_break.asp

+0

Zastanawiasz się tylko nad tym, który głosuje w dół? Co jest nie tak z moją odpowiedzią? –

+0

jeśli punkt mojego komentarza to "break"; kod, który napisano, jest tam nielegalny. – caglaror

+0

Nie wiem, czy zdajesz sobie sprawę, ale 'dla każdego()' nie jest kod javascript. Przynajmniej nie wiem o –

1

chciałbym zrobić to w ten sposób:

  • Tworzenie logiczną zmienną aby sprawdzić na każdej pętli, a jeśli zmienna jest true, a następnie wyjdź z pętli (zrób to dla każdego).

    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"; 
         } 
        }); 
    }); 
    

Uwaga to nie prawidłowe stosowanie try-catch jako try-catch należy ściśle stosować do obsługi błędów, nie skacze do różnych sekcji kodu - ale będzie działać dla tego, co robisz.

return Jeśli nie robi to za ciebie, spróbuj użyć 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) 
} 

kod zaczerpnięty z this answer

+0

Ten kod działa poprawnie, nie ma powodu do odrzucenia. Chcesz wyjaśnić? –

+1

W celu obsługi błędów należy użyć catch try, a nie przeskakiwanie do różnych sekcji skryptu. –

+0

@nalply Edytowałem, nie wiem, czego szukasz, szczerze mówiąc –

1

Pętlę można również opuścić, zmieniając wartość iteratora.

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

Ale zagnieżdżone pętle? Wewnętrzne pętle będą kontynuowane do iteracji. – caglaror

Powiązane problemy