Wow, ich wusste nicht, dass wir Loops benennen können, tolle Info! +1
– OK W
14. Oktober 2009 um 7:53 Uhr
@okw: Sie benennen die Schleife nicht. Sie beschriften einfach eine Position in der Quelle.
– xtofl
14. Oktober 2009 um 8:02 Uhr
Ich wusste nie, dass JavaScript unterstützte Labels. Ich frage mich, warum ich das noch nie gesehen habe. :Ö
– Nathan Taylor
14. Oktober 2009 um 8:19 Uhr
@xtofl: Nicht genau. Sie assoziieren eine Bezeichnung mit einer Anweisung (die eine Schleife sein könnte), indem Sie sie unmittelbar davor platzieren. Es ist nur mit einer Blockanweisung sinnvoll, da das Label nur mit den Break- und Continue-Anweisungen innerhalb des Blocks verfügbar ist.
– Tim unten
14. Oktober 2009 um 8:48 Uhr
@NickFitz: Sie könnten ein Leistungsargument dafür anführen. Im Fall von verschachtelten Schleifen könnten Etiketten nützlich sein, um aus einer äußeren Schleife auszubrechen. Während es eleganter und modularer sein kann, verschachtelte Schleifen zu vermeiden, indem innere Schleifen in separate Funktionen verschoben werden, wird es aufgrund der zusätzlichen Funktionsaufrufe geringfügig langsamer ausgeführt.
– Tim unten
14. Oktober 2009 um 10:39 Uhr
Siehe Aarons. Andernfalls: j=5;i=5 anstatt break.
Das ist einfach die beste und sauberste Lösung. Verwenden Sie keine Etiketten mehr, sie sehen schrecklich aus.
– Pedro Moreira
7. August 2014 um 21:09 Uhr
Das ist hässlich. for(i=0;i<5;i++) soll 5 mal laufen. Aktualisierung i außerhalb der Loop-Anweisung führt zu einem unerwarteten Verhalten.
– FlorianF
12. November 2014 um 8:34 Uhr
Hässlich ist subjektiv. Die Schleife soll so oft ausgeführt werden, wie Sie möchten. Die Frage war, wie man eine doppelte For-Schleife durchbricht, in der weder j noch i bis 5 laufen. Der einzige technische Grund für die Bevorzugung von mine vs ) vs. Unvollständigkeit (== <5) nach Schleifen.
– Glenn
12. November 2014 um 21:52 Uhr
Stimmen Sie @FlorianF zu, das ist hässlich in dem Sinne, dass es eine fehleranfälligere Lösung zu sein scheint als das Hinzufügen eines Labels, obwohl ich dafür keine statistischen Beweise habe. Ob Sie an Etiketten gewöhnt sind oder nicht, sie sind sicherlich kein fehlerfreies Konzept, aber harte Codierungsnummern, die Sie an mehreren Stellen ändern müssen, wenn sich eine ändert, ist ein schrecklicher Programmierstil. In Bezug auf die Bewertung ist dies eine faire Aussage und hilfreich, um die beste Antwort für das OP zu ermitteln.
– Manuel
24. April 2020 um 20:17 Uhr
@Manuel: re: “schrecklicher Programmierstil”. Es steht Ihnen frei, consts usw. für die Zahlen an beiden Stellen zu verwenden, aber das ist für die Frage nicht relevant. Da dies 2009 beantwortet wurde, würde ich heute sagen, dass Sie Ihren Code neu schreiben sollten, damit Sie keine for-Schleife verwenden müssen. (Filtern, Reduzieren, Zuordnen usw.)
– Glenn
28. April 2020 um 1:56 Uhr
Dan Bray
Es gibt mindestens fünf verschiedene Möglichkeiten, aus zwei oder mehr Schleifen auszubrechen:
1) Legen Sie die übergeordnete Schleife bis zum Ende fest
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
i = 5;
break;
}
}
}
2) Etikett verwenden
fast:
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
break fast;
}
}
3) Variable verwenden
var exit_loops = false;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
exit_loops = true;
break;
}
}
if (exit_loops)
break;
}
4) Verwenden Sie die selbstausführende Funktion
(function()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
})();
5) Verwenden Sie die reguläre Funktion
function nested_loops()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
}
nested_loops();
Jim
loop1:
for (var i in set1) {
loop2:
for (var j in set2) {
loop3:
for (var k in set3) {
break loop2; // breaks out of loop3 and loop2
}
}
}
Code kopiert von Der beste Weg, um verschachtelte Schleifen in Javascript zu brechen?
Bitte suchen Sie, bevor Sie eine Frage stellen. Der Link war die ERSTE verwandte Frage, die ich auf der linken Seite dieser Seite gesehen habe!
Nicolás Ozimica
Leider müssen Sie ein Flag setzen oder Labels verwenden (denken Sie an goto-Anweisungen der alten Schule).
var breakout = false;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
breakout = true;
break;
}
if (breakout) break;
alert(1)
};
Meiner Meinung nach ist es wichtig, den Konstruktwortschatz auf ein Minimum zu beschränken. Wenn ich auf Pausen und Fortsetzungen verzichten kann, tue ich das.
function foo ()
{
var found = false;
for(var k = 0; (k < 4 && !found); k++){
for(var m = 0; (m < 4 && !found); m++){
if( m === 2){
found = true;
}
}
}
return found;
}
Seien Sie gewarnt, nach der Schleife sind m und k um eins größer, als Sie vielleicht denken. Dies liegt daran, dass m++ und k++ vor ihren Schleifenbedingungen ausgeführt werden. Es ist jedoch immer noch besser als “schmutzige” Pausen.
EDIT: langer Kommentar @Dennis…
Ich habe es nicht 100% ernst gemeint, „schmutzig“ zu sein, aber ich denke immer noch, dass „Break“ meiner eigenen Vorstellung von sauberem Code widerspricht. Bei dem Gedanken an mehrstufige Pausen bekomme ich tatsächlich Lust zu duschen.
Ich finde rechtfertigend, was ich mit einem Gefühl für Code meine, weil ich mein ganzes Leben lang codiert habe. Der beste Grund, warum ich mir vorstellen kann, ist eine Kombination aus Manieren und Grammatik. Pausen sind einfach nicht höflich. Mehrstufige Pausen sind einfach nur unhöflich.
Beim Betrachten einer for-Anweisung weiß ein Leser genau, wo er suchen muss. Alles, was Sie über die Einsatzregeln wissen müssen, steht im Vertrag zwischen den Klammern. Als Leser beleidigen mich Pausen, es fühlt sich an, als wäre ich betrogen worden.
Klarheit ist viel respektvoller als Betrug.
Warum sollten Sie Ihr Konstruktvokabular auf ein Minimum beschränken? Das Argument, Pausen seien „schmutzig“, ist absurd. In Bezug auf die Lesbarkeit ist Ihre Lösung viel schlechter und schneidet nicht besser ab. Sie haben jedoch einen Punkt, wie jedes Konstrukt, Pausen können missbraucht werden, aber ein bisschen Schummeln hier oder da aus Gründen der Lesbarkeit ist definitiv in Ordnung.
– Denis
10. Juli 2012 um 21:41 Uhr
zu lang, um in einen Kommentar zu passen, den ich bearbeitet habe.
– Thomas Peter
13. Juli 2012 um 12:06 Uhr
Auch das Konstruktvokabular auf ein Minimum zu beschränken, ist eher ein Ergebnis des häufigen Wechsels zwischen vielen Sprachen. Sie neigen dazu, mehr Sprache zu verwenden, die zwischen ihnen üblich ist. Im Fall von JavaScript hat dies den Vorteil, dass der Code systemübergreifend kompatibel ist, und kommt auch Lesern zugute, die JavaScript möglicherweise nicht als ihre Hauptsprache verwenden.
– Thomas Peter
13. Juli 2012 um 12:37 Uhr
+1 für einen anderen Ansatz. Es ist gut, Optionen zu haben
– Phil Stark
30. August 2012 um 12:17 Uhr
Das Hinzufügen des Tests in zwei Schleifen verursacht mit größerer Wahrscheinlichkeit Fehler als ein break oder continue. In diesem Fall können Sie einfach zurückkehren, wenn Sie eine Übereinstimmung finden
– Juan Mendes
29. Dezember 2012 um 1:05 Uhr
8387700cookie-checkWie unterbreche ich verschachtelte Schleifen in JavaScript? [duplicate]yes
Pause (2) ; 😮 was meinst du damit 2break kann keine Argumente haben
– Rakesh Juyal
14. Oktober 2009 um 7:51 Uhr
Zeile 7 fehlt ein Semikolon danach
alert(1)
.– Nathan Taylor
14. Oktober 2009 um 8:18 Uhr
@Nathan Taylor: Semikolons sind in JavaScript optional, gelten aber als guter Stil
– Tim Büthe
14. Oktober 2009 um 8:41 Uhr
Nahezu Duplikat von stackoverflow.com/q/183161/149391
– Joey Adams
13. Juni 2012 um 9:57 Uhr
@RakeshJuyal tut es in anderen Sprachen wie C
– Masadow
4. Februar 2015 um 10:11 Uhr