Heim Web-Frontend js-Tutorial So unterbrechen Sie eine forEach-Schleife (Details)

So unterbrechen Sie eine forEach-Schleife (Details)

Mar 19, 2019 am 11:41 AM
html javascript

Der Inhalt dieses Artikels befasst sich mit der Unterbrechung der forEach-Schleife (ausführliche Einführung). Ich hoffe, dass er für Sie hilfreich ist.

Wenn Sie eine for-Schleife verwenden, können Sie die break- oder return-Anweisung verwenden, um die for-Schleife zu beenden (return beendet die Funktion direkt). Wenn Sie jedoch eine forEach-Schleife verwenden, wie kommen Sie dann aus der Schleife heraus?

Versuchen Sie, Break und Return zu verwenden

Versuchen Sie zunächst, die Return-Anweisung zu verwenden ---- es funktioniert nicht

[1,2,3,4,5].forEach(item=>{
    if(item===2){
    return
    }
    console.log(item);
})
Nach dem Login kopieren

Wie von MDN gegeben Offizielle Erklärung

Warum passiert das? Werfen wir zunächst einen Blick auf die offizielle Dokumentation.
Im MDN-Dokument heißt es eindeutig, dass die forEach-Schleife nicht beendet werden kann.

Zitiert aus MDN
Es gibt keine andere Möglichkeit, eine forEach()-Schleife zu stoppen oder zu unterbrechen, als eine Ausnahme auszulösen. Wenn Sie ein solches Verhalten benötigen, ist die forEach()-Methode das falsche Werkzeug.
Hinweis: Es gibt keine Möglichkeit, die forEach()-Schleife abzubrechen oder zu verlassen, außer eine Ausnahme auszulösen. Wenn Sie dies benötigen, ist die Verwendung der Methode forEach() falsch.
Wenn Sie die Schleife vorzeitig beenden müssen, können Sie Folgendes verwenden:
Einfache Schleife
for...of-Schleife
Array.prototype.every()
Array.prototype.some()
Array.prototype.find()
Array.prototype.findIndex()

Entdecken Sie, warum Break und Return nicht funktionieren

Lassen Sie uns einen ersten Blick darauf werfen at why return hat keine Auswirkung. Die Implementierung von forEach kann im Code ausgedrückt werden und kann als folgende Struktur geschrieben werden:

const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
  const rs = (function(item) {
    console.log(item);
    if (item > 2) return false;
  })(arr[i])
}
Nach dem Login kopieren

Die Verwendung der return-Anweisung entspricht dem Kopieren des Rückgabewerts nach rs in Jede selbstausführende Funktion hat jedoch keinen Einfluss auf die gesamte Funktion. Der Grund für die Verwendung der Break-Anweisung zum Melden eines Fehlers besteht darin, dass die Break-Anweisung nicht im Funktionskörper des JS-Interpreters erscheinen kann.

So umgehen Sie die forEach-Schleife

MDN offiziell empfohlene Methode

// every在碰到return false的时候,中止循环。some在碰到return ture的时候,中止循环。
var a = [1, 2, 3, 4, 5]
a.every(item=>{
    console.log(item); //输出:1,2
    if (item === 2) {
        return false
    } else {
        return true
    }
})
var a = [1, 2, 3, 4, 5]
a.some(item=> {
    console.log(item); //输出:1,2
    if (item === 2) {
        return true
    } else {
        return false
    }
})
Nach dem Login kopieren

Andere Methoden

1. Verwenden Sie eine for-Schleife oder eine for-in-Schleife anstelle von

2. Verwenden Sie throw, um eine Ausnahme auszulösen

try {
  [1, 2, 3, 4, 5].forEach(function(item) {
    if (item=== 2) throw item;
    console.log(item);
  });
} catch (e) {}
Nach dem Login kopieren

3. Verwenden Sie Urteilsvermögen, um eine leere Schleife auszuführen 🎜>

var tag;
[1, 2, 3, 4, 5].forEach(function(item){
    if(!tag){
        console.log(item);
        if(item===2){
            tag=true;
        }
    }
Nach dem Login kopieren
So gibt es zwei Probleme: Das erste Problem besteht darin, dass eine Tag-Variable global hinzugefügt wird. Das zweite Problem besteht darin, dass sie die forEach-Schleife zu beenden scheint, aber tatsächlich hat sich die Anzahl der Schleifen nicht geändert Ruft einfach zurück, wenn die Bedingungen nicht erfüllt sind. Lösen wir zunächst das erste Problem, wie die neu hinzugefügte Tag-Variable global gelöscht wird. Tatsächlich verfügt forEach über einen zweiten Parameter, der den Ausführungskontext des Rückrufs darstellt. Dies ist der entsprechende Wert im Rückruf. Daher können wir den Kontext auf ein leeres Objekt setzen. Dieses Objekt hat natürlich kein Tag-Attribut. Wenn Sie also auf this.tag zugreifen, erhalten Sie undefiniert

[1, 2, 3, 4, 5].forEach(function(item){
    if(!this.tag){
        console.log(item);
        if(item===2){
            this.tag=true;
        }
    }
},{})
Nach dem Login kopieren
4. Ändern Sie den Index

var array=[1, 2, 3, 4, 5]
array.forEach(item=>{
  if (item == 2) {
    array = array.splice(0);
  }
  console.log(item);
})
Nach dem Login kopieren
Erläuterung:

Ausführungsdetails von forEach

1 Der Durchlaufbereich wurde bei der ersten Ausführung des Rückrufs bestimmt, sodass das Verschieben des Inhalts während des Ausführungsprozesses keinen Einfluss auf die Anzahl hat Dies ist das Gleiche wie bei Schleifen. In den folgenden beiden Fällen wird einer eine Endlosschleife verursachen und der andere nicht. Wenn der vorhandene Wert geändert wird, wird der Wert übergeben zum Rückruf ist der Moment, in dem forEach sie durchläuft.

var arr=[1,2,3,4,5]
//会造成死循环的代码
for(var i=0;i<arr.length;i++){
    arr.push(&#39;a&#39;)
}
//不会造成死循环
arr.forEach(item=>arr.push('a'))
Nach dem Login kopieren
3. Gelöschte Elemente werden nicht durchlaufen. Wenn ein bereits besuchtes Element während der Iteration gelöscht wird (z. B. mit Shift()), werden nachfolgende Elemente übersprungen.

var arr=[1,2,3,4,5];
arr.forEach((item,index)=>{
    console.log(`time ${index}`)
    arr[index+1]=`${index}a`;
    console.log(item)
})
Nach dem Login kopieren
kürzt die folgenden Werte, wenn die Bedingungen erfüllt sind. Wenn der entsprechende Wert während der nächsten Schleife nicht angezeigt wird, wird die Schleife jedoch beendet, sodass wir dies tun können Ein kleiner Trick besteht darin, das Array von 0 abzuschneiden und es dann dem Array neu zuzuweisen, also array=array.splice(0).

Dieser Artikel ist hier zu Ende. Weitere spannende Inhalte finden Sie in der Spalte

JavaScript-Tutorial-Video

auf der chinesischen PHP-Website!

Das obige ist der detaillierte Inhalt vonSo unterbrechen Sie eine forEach-Schleife (Details). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tabellenrahmen in HTML Tabellenrahmen in HTML Sep 04, 2024 pm 04:49 PM

Anleitung zum Tabellenrahmen in HTML. Hier besprechen wir verschiedene Möglichkeiten zum Definieren von Tabellenrändern anhand von Beispielen für den Tabellenrand in HTML.

HTML-Rand links HTML-Rand links Sep 04, 2024 pm 04:48 PM

Anleitung zum HTML-Rand links. Hier besprechen wir einen kurzen Überblick über HTML margin-left und seine Beispiele sowie seine Code-Implementierung.

Verschachtelte Tabelle in HTML Verschachtelte Tabelle in HTML Sep 04, 2024 pm 04:49 PM

Dies ist eine Anleitung für verschachtelte Tabellen in HTML. Hier diskutieren wir anhand der entsprechenden Beispiele, wie man eine Tabelle innerhalb der Tabelle erstellt.

HTML-Tabellenlayout HTML-Tabellenlayout Sep 04, 2024 pm 04:54 PM

Leitfaden zum HTML-Tabellenlayout. Hier besprechen wir die Werte des HTML-Tabellenlayouts zusammen mit den Beispielen und Ausgaben im Detail.

HTML-Eingabeplatzhalter HTML-Eingabeplatzhalter Sep 04, 2024 pm 04:54 PM

Leitfaden für HTML-Eingabeplatzhalter. Hier besprechen wir die Beispiele für HTML-Eingabeplatzhalter zusammen mit den Codes und Ausgaben.

HTML-geordnete Liste HTML-geordnete Liste Sep 04, 2024 pm 04:43 PM

Leitfaden zur HTML-geordneten Liste. Hier besprechen wir auch die Einführung von HTML-geordneten Listen und Typen sowie deren Beispiele

Text in HTML verschieben Text in HTML verschieben Sep 04, 2024 pm 04:45 PM

Anleitung zum Verschieben von Text in HTML. Hier besprechen wir eine Einführung, wie Marquee-Tags funktionieren, mit Syntax und Beispielen für die Implementierung.

HTML-Onclick-Button HTML-Onclick-Button Sep 04, 2024 pm 04:49 PM

Anleitung zum HTML-OnClick-Button. Hier diskutieren wir deren Einführung, Funktionsweise, Beispiele und Onclick-Events in verschiedenen Veranstaltungen.

See all articles