Heim Web-Frontend js-Tutorial Ausführliche Erklärung, warum die Traversal-Methode in JavaScript dem Schleifencode vorgezogen wird

Ausführliche Erklärung, warum die Traversal-Methode in JavaScript dem Schleifencode vorgezogen wird

Jul 26, 2017 pm 05:04 PM
javascript js 遍历

Priorisieren Sie die Verwendung von Traversal-Methoden gegenüber Schleifen

Bei der Verwendung von Schleifen kann es leicht zu einer Verletzung des DRY-Prinzips (Don't Repeat Yourself) kommen. Dies liegt daran, dass wir normalerweise die Methode „Kopieren und Einfügen“ wählen, um zu vermeiden, dass Absätze von Zirkelanweisungen handschriftlich geschrieben werden. Dies führt jedoch zu einer Menge doppeltem Code im Code, und Entwickler werden sinnlos „das Rad neu erfinden“. Noch wichtiger ist, dass beim Kopieren und Einfügen leicht die Details in der Schleife übersehen werden, z. B. der Startindexwert, die Beendigungsbedingung usw.

Zum Beispiel tritt dieses Problem bei der folgenden for-Schleife auf, vorausgesetzt, dass n die Länge des Sammlungsobjekts ist:


for (var i = 0; i <= n; i++) { ... }
// 终止条件错误,应该是i < n
for (var i = 1; i < n; i++) { ... }
// 起始变量错误,应该是i = 0
for (var i = n; i >= 0; i--) { ... }
// 起始变量错误,应该是i = n - 1
for (var i = n - 1; i > 0; i--) { ... }
// 终止条件错误,应该是i >= 0
Nach dem Login kopieren

Es kann in gesehen werden einige Details der Schleife Es ist leicht, Fehler zu machen. Mithilfe des von JavaScript bereitgestellten Abschlusses (siehe Punkt 11) können die Details der Schleife zur Wiederverwendung gekapselt werden. Tatsächlich bietet ES5 einige Methoden zur Lösung dieses Problems. Unter diesen ist Array.prototype.forEach das einfachste. Damit können wir die Schleife wie folgt schreiben:


// 使用for循环
for (var i = 0, n = players.length; i < n; i++) {
  players[i].score++;
}

// 使用forEach
players.forEach(function(p) {
  p.score++;
});
Nach dem Login kopieren

Zusätzlich zum Durchlaufen des Sammlungsobjekts besteht ein weiteres gängiges Muster darin, jedes Element in der ursprünglichen Sammlung zu durchqueren. Führen Sie bestimmte Operationen an Elementen aus und erhalten Sie dann einen neuen Satz. Wir können auch die forEach-Methode verwenden, um Folgendes zu implementieren:


// 使用for循环
var trimmed = [];
for (var i = 0, n = input.length; i < n; i++) {
  trimmed.push(input[i].trim());
}

// 使用forEach
var trimmed = [];
input.forEach(function(s) {
  trimmed.push(s.trim());
});
Nach dem Login kopieren

Aufgrund dieser Methode von Konvertieren einer Menge Das Muster der Zuordnung einer anderen Sammlung ist sehr verbreitet, und ES5 bietet auch die Methode Array.prototype.map, um den Code einfacher und eleganter zu machen:


var trimmed = input.map(function(s) {
  return s.trim();
});
Nach dem Login kopieren

Darüber hinaus besteht ein gängiges Muster darin, die Sammlung nach bestimmten Bedingungen zu filtern und dann eine Teilmenge der ursprünglichen Sammlung zu erhalten. Array.prototype.filter wird in ES5 bereitgestellt, um diesen Modus zu implementieren. Diese Methode akzeptiert ein Prädikat als Parameter, eine Funktion, die „true“ oder „false“ zurückgibt: Die Rückgabe von „true“ bedeutet, dass das Element in der neuen Sammlung beibehalten wird; die Rückgabe von „false“ bedeutet, dass das Element nicht in der neuen Sammlung angezeigt wird. Beispielsweise verwenden wir den folgenden Code, um Produktpreise zu filtern und nur Produkte mit Preisen im Bereich [min, max] zu behalten:


listings.filter(function(listing) {
  return listing.price >= min && listing.price <= max;
});
Nach dem Login kopieren

Natürlich das oben Genannte Methode Ist in Umgebungen verfügbar, die ES5 unterstützen. In anderen Umgebungen haben wir zwei Möglichkeiten: 1. Verwenden Sie Bibliotheken von Drittanbietern wie Underscore oder Lodash, die zahlreiche gängige Methoden zum Betreiben von Objekten und Sammlungen bereitstellen. 2. Definieren Sie es nach Bedarf.

Definieren Sie beispielsweise die folgende Methode, um die vorherigen Elemente im Satz basierend auf einer bestimmten Bedingung abzurufen:


function takeWhile(a, pred) {
  var result = [];
  for (var i = 0, n = a.length; i < n; i++) {
    if (!pred(a[i], i)) {
      break;
    }
    result[i] = a[i];
  }
  return result;
}

var prefix = takeWhile([1, 2, 4, 8, 16, 32], function(n) {
  return n < 10;
}); // [1, 2, 4, 8]
Nach dem Login kopieren

Um eine bessere Wiederverwendung zu ermöglichen Diese Methode können wir für das Array.prototype-Objekt definieren. Informationen zu spezifischen Effekten finden Sie in Punkt 42.


Array.prototype.takeWhile = function(pred) {
  var result = [];
  for (var i = 0, n = this.length; i < n; i++) {
    if (!pred(this[i], i)) {
      break;
    }
    result[i] = this[i];
  }
  return result; 
};

var prefix = [1, 2, 4, 8, 16, 32].takeWhile(function(n) {
  return n < 10;
}); // [1, 2, 4, 8]
Nach dem Login kopieren

Es gibt nur eine Situation, in der die Verwendung einer Schleife besser ist als die Verwendung einer Traversal-Funktion: wenn Sie Pause und Fortfahren verwenden müssen. Beispielsweise treten Probleme auf, wenn forEach zur Implementierung der oben genannten takeWhile-Methode verwendet wird. Wie sollte sie implementiert werden, wenn das Prädikat nicht erfüllt ist?


function takeWhile(a, pred) {
  var result = [];
  a.forEach(function(x, i) {
    if (!pred(x)) {
      // ?
    }
    result[i] = x;
  });
  return result;
}
Nach dem Login kopieren

Wir können eine interne Ausnahme verwenden, um das Urteil zu fällen, aber es ist auch etwas umständlich und ineffizient:


function takeWhile(a, pred) {
  var result = [];
  var earlyExit = {}; // unique value signaling loop break
  try {
    a.forEach(function(x, i) {
      if (!pred(x)) {
        throw earlyExit;
      }
      result[i] = x;
    });
  } catch (e) {
    if (e !== earlyExit) { // only catch earlyExit
      throw e;
    }
  }
  return result;
}
Nach dem Login kopieren

Aber nach der Verwendung von forEach ist der Code noch ausführlicher als vor der Verwendung. Das ist offensichtlich problematisch. Für dieses Problem bietet ES5 einige Methoden zur Behandlung von Schleifen, die vorzeitig beendet werden. Ihre Verwendung ist wie folgt:


[1, 10, 100].some(function(x) { return x > 5; }); // true
[1, 10, 100].some(function(x) { return x < 0; }); // false

[1, 2, 3, 4, 5].every(function(x) { return x > 0; }); // true
[1, 2, 3, 4, 5].every(function(x) { return x < 3; }); // false
Nach dem Login kopieren

Beide Methoden sind ein Kurzschluss Methode: Solange ein Element im Prädikat der Methode „some“ zurückgibt, wird „some“ zurückgegeben. Solange ein Element im Prädikat der Methode „Every“ zurückgegeben wird, gibt die Methode „Every“ auch „Falsch“ zurück.

Daher kann takeWhile wie folgt implementiert werden:


function takeWhile(a, pred) {
  var result = [];
  a.every(function(x, i) {
    if (!pred(x)) {
      return false; // break
    }
    result[i] = x;
    return true; // continue
  });
  return result;
}
Nach dem Login kopieren

Tatsächlich ist dies die Idee der funktionalen Programmierung. In der funktionalen Programmierung sieht man selten explizite For- oder While-Schleifen. Die Details der Schleifen sind schön gekapselt.

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, warum die Traversal-Methode in JavaScript dem Schleifencode vorgezogen wird. 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 尊渡假赌尊渡假赌尊渡假赌

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)

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen mit PHP und JS Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen mit PHP und JS Dec 17, 2023 pm 06:55 PM

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen in PHP und JS. Mit der rasanten Entwicklung des Internets und der Technologie ist der Aktienhandel für viele Anleger zu einer wichtigen Möglichkeit geworden. Die Aktienanalyse ist ein wichtiger Teil der Anlegerentscheidung, und Kerzendiagramme werden häufig in der technischen Analyse verwendet. Wenn Sie lernen, wie man Kerzendiagramme mit PHP und JS zeichnet, erhalten Anleger intuitivere Informationen, die ihnen helfen, bessere Entscheidungen zu treffen. Ein Candlestick-Chart ist ein technischer Chart, der Aktienkurse in Form von Candlesticks anzeigt. Es zeigt den Aktienkurs

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Apr 03, 2024 am 11:55 AM

Die Technologie zur Gesichtserkennung und -erkennung ist bereits eine relativ ausgereifte und weit verbreitete Technologie. Derzeit ist JS die am weitesten verbreitete Internetanwendungssprache. Die Implementierung der Gesichtserkennung und -erkennung im Web-Frontend hat im Vergleich zur Back-End-Gesichtserkennung Vor- und Nachteile. Zu den Vorteilen gehören die Reduzierung der Netzwerkinteraktion und die Echtzeiterkennung, was die Wartezeit des Benutzers erheblich verkürzt und das Benutzererlebnis verbessert. Die Nachteile sind: Es ist durch die Größe des Modells begrenzt und auch die Genauigkeit ist begrenzt. Wie implementiert man mit js die Gesichtserkennung im Web? Um die Gesichtserkennung im Web zu implementieren, müssen Sie mit verwandten Programmiersprachen und -technologien wie JavaScript, HTML, CSS, WebRTC usw. vertraut sein. Gleichzeitig müssen Sie auch relevante Technologien für Computer Vision und künstliche Intelligenz beherrschen. Dies ist aufgrund des Designs der Webseite erwähnenswert

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen Dec 18, 2023 pm 03:39 PM

Mit der rasanten Entwicklung der Internetfinanzierung sind Aktieninvestitionen für immer mehr Menschen zur Wahl geworden. Im Aktienhandel sind Kerzendiagramme eine häufig verwendete Methode der technischen Analyse. Sie können den sich ändernden Trend der Aktienkurse anzeigen und Anlegern helfen, genauere Entscheidungen zu treffen. In diesem Artikel werden die Entwicklungskompetenzen von PHP und JS vorgestellt, der Leser wird zum Verständnis des Zeichnens von Aktienkerzendiagrammen geführt und es werden spezifische Codebeispiele bereitgestellt. 1. Aktien-Kerzendiagramme verstehen Bevor wir uns mit dem Zeichnen von Aktien-Kerzendiagrammen befassen, müssen wir zunächst verstehen, was ein Kerzendiagramm ist. Candlestick-Charts wurden von den Japanern entwickelt

Java, wie man einen Ordner durchläuft und alle Dateinamen abruft Java, wie man einen Ordner durchläuft und alle Dateinamen abruft Mar 29, 2024 pm 01:24 PM

Java ist eine beliebte Programmiersprache mit leistungsstarken Funktionen zur Dateiverarbeitung. In Java ist das Durchsuchen eines Ordners und das Abrufen aller Dateinamen ein üblicher Vorgang, der uns dabei helfen kann, Dateien in einem bestimmten Verzeichnis schnell zu finden und zu verarbeiten. In diesem Artikel wird erläutert, wie eine Methode zum Durchlaufen eines Ordners und zum Abrufen aller Dateinamen in Java implementiert wird, und es werden spezifische Codebeispiele bereitgestellt. 1. Verwenden Sie die rekursive Methode, um den Ordner zu durchlaufen. Die rekursive Methode ist eine Möglichkeit, sich selbst aufzurufen und den Ordner effektiv zu durchlaufen.

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Die Beziehung zwischen js und vue Die Beziehung zwischen js und vue Mar 11, 2024 pm 05:21 PM

Die Beziehung zwischen js und vue: 1. JS als Eckpfeiler der Webentwicklung; 2. Der Aufstieg von Vue.js als Front-End-Framework; 3. Die komplementäre Beziehung zwischen JS und Vue; Vue.

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

See all articles