Was ist der beste Weg, um break aus verschachtelten Schleifen, die in JavaScript?
Was ist der beste Weg, um break aus verschachtelten Schleifen, die in Javascript?
//Write the links to the page.
for (var x = 0; x < Args.length; x++)
{
for (var Heading in Navigation.Headings)
{
for (var Item in Navigation.Headings[Heading])
{
if (Args[x] == Navigation.Headings[Heading][Item].Name)
{
document.write("<a href=\""
+ Navigation.Headings[Heading][Item].URL + "\">"
+ Navigation.Headings[Heading][Item].Name + "</a> : ");
break; //<---HERE, I need to break out of two loops.
}
}
}
}
- Hier ist gutes Beispiel für das brechen von loops und aus Blöcken von code: marcin-chwedczuk.github.io/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Genau wie Perl,
im Sinne EMCA-262 Abschnitt 12.12. [MDN Docs]
Im Gegensatz zu C, diese Etiketten können nur verwendet werden, für die
weiter
und diebreak
, da Javascript nichtgoto
.goto
dem Etikett. Sie sind im wesentlichen die Benennung einer Schleife und dem Spruch I want to break out of suchandsuch eine Schleife.loop: { /* loop here */ }
für die Lesbarkeit.goto
s. Die Anzahl der upvotes für diese Antwort ist ausreichend Beweise dafür, dass diese Antwort die meisten Menschen Lesen diese Frage suchen. (Und wenn ich ein Wett Mann, würde ich auch darauf Wetten, dass bedeutet, dass die Mehrheit der Menschen don ' T betrachten Sie die Verwendung von Etiketten, schlechte Praxis.)continue
undbreak
.Wickeln, die bis in eine Funktion und dann nur
return
.Ich bin ein wenig spät zur party, aber die folgende ist eine Sprache-agnostischen Ansatz, die nicht mit GOTO/Etiketten oder-Funktion Verpackung:
Auf den Kopf, es fließt ganz natürlich, die sollen bitte die " non-GOTO Menge. Auf der Sollseite steht, wird die innere Schleife muss die aktuelle iteration vor dem Abbruch, so dass es möglicherweise nicht geeignet in einigen Szenarien.
break
odercontinue
sofort, nachdem Sie z und y? Ich mag die Idee der Verwendung derfor
loop Bedingungen kick out. Elegant in seiner eigenen Art und Weise.Ich weiß, das ist ein wirklich altes Thema, aber da mein standard-Ansatz ist noch nicht da, ich dachte, ich post es für die Zukunft Googler.
condition
ausgewertettrue
auf die erste iteration die nested-loop -, Sie laufen immer noch durch die restlichen 10 Iterationen, die überprüfung derabort
Wert jedes mal. Dies ist nicht ein performance-problem für 10 Iterationen, aber es wäre mit, sagen wir, 10.000 Euro.abort
und der Ausdruck. In einfachen Szenarien, die vielleicht in Ordnung sein, aber für riesige loops mit gazillion Iterationen, die ein problem sein könnteWie ist das? 🙂
x
, wenn Logik innerhalb der Schleife Referenzen x zu einem späteren Zeitpunkt (zum Beispiel definiert eine innere anonyme Funktion, die gespeichert und später ausgeführt), wird der Wert für x wird das sein, was es war in der Ende der Schleife, nicht die index-Funktion definiert wurde während. (Fortsetzung)x
als parameter in der anonymen Funktion, so dass es erzeugt eine neue Kopie, die dann referenziert werden, als eine Schließung, da es nicht ändern, ab diesem Punkt auf. In kurzen, empfehle ich ephemient Antwort.ganz einfach
loop1=loop2=false;
Wie über die Verwendung keine Pause, kein Abbruch-flags, und keine zusätzliche Bedingung überprüft. Diese version ist einfach sprengt den loop-Variablen (macht Sie
Number.MAX_VALUE
), wenn die Bedingung erfüllt ist, und Kräfte, alle loops zu beenden aus.Gab es eine ähnliche-ish Antwort für herunterzählen-Typ geschachtelte Schleifen, aber das funktioniert für das Inkrementieren-Typ geschachtelte Schleifen, ohne zu prüfen, jede Schleife ist eine Kündigung Wert für einfache Schleifen.
Anderes Beispiel:
Hier sind fünf Möglichkeiten zum break aus verschachtelten Schleifen in JavaScript:
1) Set parent(s) - Schleife am Ende
2) Verwenden Sie label -
3) variable
4) selbst ausgeführte Funktion
5) Verwenden Sie reguläre Funktion
Wie etwa schieben Schleifen an Ihren Grenzen Ende
Wenn Sie mit Coffeescript gibt es eine praktische "tun" - Schlüsselwort, das macht es einfacher, zu definieren und direkt ausführen einer anonymen Funktion:
...so können Sie einfach die "return" raus aus den Schlaufen.
for
Schleifen nicht zwei.Ich dachte, ich würde zeigen, eine functional-programming-Ansatz. Sie können ausbrechen aus verschachtelten Array.der Prototyp.einige() und/oder ein Array ist.der Prototyp.jeder() Funktionen, wie in meinen Lösungen. Ein zusätzlicher Vorteil dieses Ansatzes ist, dass
Object.keys()
zählt nur ein Objekt der eigenen aufzählbaren Eigenschaften, in der Erwägung, dass "eine for-in-Schleife werden die Eigenschaften in der Prototyp-Kette als auch".In der Nähe der OP-Lösung:
Lösung, die reduziert die Iteration über die Überschriften/Artikel:
Bereits erwähnt, die zuvor von swilliams, aber mit einem Beispiel unten (Javascript):
Hmmm Hallo der 10 Jahre alte Partei ?
Warum nicht eine Bedingung in Ihrem für ?
Wie diese Sie stoppen, wenn Sie wollen
In meinem Fall, mit Typoskript, wir können einige (), die durch das array und stoppen, wenn Bedingung erfüllt ist
Also mein code wie dieser :
Wie diese, wird die Schleife beendet Recht, nachdem die Bedingung erfüllt ist,
Erinnerung : Diese Ausführung von code in TypeScript
der beste Weg ist -
1) Sortieren Sie die beiden Arrays, die in der ersten und zweiten Schleife.
2), wenn Element matched then break die innere Schleife und halten Sie den index-Wert.
3) beim start der nächsten iteration start innere Schleife mit hold-index-Wert.