suchen
HeimWeb-Frontendjs-TutorialÜbernehmen Sie die Kontrolle über Schleifen mit Symbol.iterator

Take control of loops with Symbol.iterator

Haben Sie jemals ein Object.entries verwendet und sich gefragt, wie es funktioniert? Es ist viel einfacher als Sie denken!

Hier ist eine grundlegende Implementierung:

function objectEntries(obj) {
  const entries = [];

  for (const key in obj) {
    if (Object.hasOwn(obj, key)) {
      entries.push([key, obj[key]]);
    }
  }

  return entries;
}

Dieser Code ist jedoch nicht ganz gut genug – was wäre, wenn das Objekt massiv wäre? Die Leistung des Array-basierten Ansatzes muss für den gesamten Prozess der Ausführung dieser Funktion im Speicher gespeichert werden. Und wenn Sie es noch einmal verwenden? Es muss trotzdem ein neues Array erstellt und im Speicher gehalten werden. In der realen Welt kann dies zu ernsthaften Leistungsproblemen führen und irgendwann müssen wir uns auf die Leistung einstellen. Es gibt jedoch eine elegante Lösung, die all diese Probleme löst: Symbol.iterator kommt zur Rettung!

Hier ist ein aktualisierter Ausschnitt:

function objectEntries(obj) {
  return {
    [Symbol.iterator]() {
      const keys = Object.keys(obj);
      let index = 0;

      return {
        next() {
          if (index 



<p><strong>Warum Symbol.iterator für die Iteration verwenden?</strong></p>

<p>In unserer ersten Implementierung erstellt die Funktion „objectEntries“ ein Array aller Einträge ([Schlüssel, Wert]-Paare) im Speicher, was ein Problem sein kann, wenn das Objekt eine große Anzahl von Eigenschaften hat. Das Speichern aller Einträge in einem Array bedeutet, dass wir jedem einzelnen Paar im Voraus Speicher zuweisen müssen. Dieser Ansatz ist für kleinere Objekte einigermaßen in Ordnung, wird jedoch mit zunehmender Objektgröße schnell ineffizient und einfach langsamer.</p>

<p>Im aktualisierten Code definieren wir [Symbol.iterator] für ein Objekt, das die Iterationslogik enthält. Lassen Sie es uns Schritt für Schritt aufschlüsseln:</p>

  • Schlüssel initialisieren: Object.keys(obj) ruft ein Array von Schlüsseln vom Objekt obj ab. Mithilfe dieser Schlüsselliste können wir genau wissen, auf welche Eigenschaften wir zugreifen müssen, ohne jeden Eintrag speichern zu müssen.
  • Verwenden Sie einen Indexzeiger: Ein variabler Index verfolgt unsere aktuelle Position im Schlüsselarray. Dies ist der einzige Zustand, den wir in der Schleife haben werden.
  • Definieren Sie die nächste Methode: Die Funktion next() verwendet den Index, um den aktuellen Schlüssel abzurufen und ihn zu erhöhen. Es gibt jedes [key, obj[key]]-Paar als Wert zurück und setzt done: true, wenn wir alle Schlüssel durchlaufen haben.
  • Auf diese Weise ermöglichen wir, dass objectEntries mit jeder for...of-Schleife kompatibel sind, ohne dass die Speicherkosten für die vorherige Erstellung eines ganzen Arrays von Einträgen anfallen.

Symbol.iterator auf benutzerdefinierte Schleifen anwenden

Lassen Sie uns genauer untersuchen, wie diese Methoden eine bessere Kontrolle über das Schleifenverhalten ermöglichen können. Jedes der bereitgestellten Beispiele zeigt eine einzigartige Möglichkeit, mit Array-Daten zu interagieren und Ihrem Code viel Flexibilität zu verleihen. Wir werden die Auswirkungen jeder Methode untersuchen und wie sie in verschiedenen Szenarien eingesetzt werden können.

In diesen Beispielen werde ich den Array-Prototyp (weitere Informationen zu Prototypen finden Sie hier) mit den Beispielmethoden erweitern, um die Lesbarkeit meines Codes zu verbessern. Lasst uns gleich einsteigen!

Diese ReverseIterator-Methode kann beispielsweise in einer Chat-Anwendung nützlich sein, in der Sie möglicherweise die neuesten Nachrichten zuerst anzeigen möchten. Chat-Anwendungen sind bekannt dafür, dass sie eine Menge Daten (in diesem Fall Nachrichten) enthalten. Mit reverseIterator können Sie eine Liste von Nachrichten durchlaufen und sie in der gewünschten Reihenfolge anzeigen, ohne ein neues umgekehrtes Array erstellen zu müssen.

function objectEntries(obj) {
  const entries = [];

  for (const key in obj) {
    if (Object.hasOwn(obj, key)) {
      entries.push([key, obj[key]]);
    }
  }

  return entries;
}

Mit dieser einzigartigen Methode können Sie ein Array durchlaufen und dabei sicherstellen, dass nur eindeutige Werte zurückgegeben werden. Dies ist sehr nützlich, um Duplikate im Handumdrehen zu entfernen, ohne sie vorher zu filtern und mehr Speicher zu verbrauchen.

function objectEntries(obj) {
  return {
    [Symbol.iterator]() {
      const keys = Object.keys(obj);
      let index = 0;

      return {
        next() {
          if (index 



<p>Die folgende Chunk-Methode kann beim Umgang mit großen Datensätzen hilfreich sein. Sie können diese in kleineren Chunks verarbeiten, um die Speichernutzung zu reduzieren und die Leistung zu verbessern. Nehmen wir an, Sie importieren Daten aus einer CSV-Datei und können sie in besser skalierbaren Segmenten lesen und verarbeiten. Darüber hinaus kann Chunking in Web-Benutzeroberflächen für die Paginierung verwendet werden, sodass Sie eine bestimmte Anzahl von Elementen pro Seite anzeigen oder einen Infinite Loader besser verwalten können.<br>
</p>

<pre class="brush:php;toolbar:false">Array.prototype.reverseIterator = function() {
  let index = this.length - 1;
  return {
    [Symbol.iterator]: () => ({
      next: () => {
        if (index >= 0) {
          return { value: this[index--], done: false };
        }
        return { done: true };
      }
    })
  };
};

const numbers = [1, 2, 3, 4, 5];
for (const num of numbers.reverseIterator()) {
  console.log(num); // 5, 4, 3, 2, 1
}

Fazit

In diesem Artikel haben wir untersucht, wie Symbol.iterator die Logik anpasst und die Effizienz unserer Schleifen verbessert. Durch die Implementierung benutzerdefinierter iterierbarer Methoden auf dem Array.prototype (oder einer anderen zu diesem Zweck iterierbaren Methode) können wir die Speichernutzung effektiv verwalten und steuern, wie unsere Schleife ausgeführt wird.

Das erste Beispiel von objectEntries zeigte, wie ein Array-basierter Ansatz bei der Verarbeitung großer Objekte zu Leistungsproblemen führen kann. Durch die Verwendung des SYmbol.iterator haben wir jedoch eine effiziente Lösung geschaffen, die es uns ermöglicht, über Objekteinträge zu iterieren, ohne den Aufwand einer unnötigen Speicherzuweisung.

Wir haben uns auch mehrere praktische Beispiele angesehen, wie die Erweiterung des Array.prototype verschiedene reale Szenarien erleichtern kann, mit denen sich Entwickler täglich auseinandersetzen müssen.

Mit diesen leistungsstarken Tools sind Sie besser gerüstet, um komplexe Datenverarbeitungsszenarien in JavaScript zu lösen, ohne dass sich dies auf die Leistung Ihrer App auswirkt.

Das obige ist der detaillierte Inhalt vonÜbernehmen Sie die Kontrolle über Schleifen mit Symbol.iterator. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
JavaScripts Rolle: das Web interaktiv und dynamisch machenJavaScripts Rolle: das Web interaktiv und dynamisch machenApr 24, 2025 am 12:12 AM

JavaScript ist das Herzstück moderner Websites, da es die Interaktivität und Dynamik von Webseiten verbessert. 1) Es ermöglicht die Änderung von Inhalten, ohne die Seite zu aktualisieren, 2) Webseiten durch DOMAPI zu manipulieren, 3) Komplexe interaktive Effekte wie Animation und Drag & Drop, 4) die Leistung und Best Practices optimieren, um die Benutzererfahrung zu verbessern.

C und JavaScript: Die Verbindung erklärteC und JavaScript: Die Verbindung erklärteApr 23, 2025 am 12:07 AM

C und JavaScript erreichen die Interoperabilität durch WebAssembly. 1) C -Code wird in das WebAssembly -Modul zusammengestellt und in die JavaScript -Umgebung eingeführt, um die Rechenleistung zu verbessern. 2) In der Spieleentwicklung kümmert sich C über Physik -Engines und Grafikwiedergabe, und JavaScript ist für die Spiellogik und die Benutzeroberfläche verantwortlich.

Von Websites zu Apps: Die verschiedenen Anwendungen von JavaScriptVon Websites zu Apps: Die verschiedenen Anwendungen von JavaScriptApr 22, 2025 am 12:02 AM

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.

Python gegen JavaScript: Anwendungsfälle und Anwendungen verglichenPython gegen JavaScript: Anwendungsfälle und Anwendungen verglichenApr 21, 2025 am 12:01 AM

Python eignet sich besser für Datenwissenschaft und Automatisierung, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python funktioniert in Datenwissenschaft und maschinellem Lernen gut und unter Verwendung von Bibliotheken wie Numpy und Pandas für die Datenverarbeitung und -modellierung. 2. Python ist prägnant und effizient in der Automatisierung und Skripten. 3. JavaScript ist in der Front-End-Entwicklung unverzichtbar und wird verwendet, um dynamische Webseiten und einseitige Anwendungen zu erstellen. 4. JavaScript spielt eine Rolle bei der Back-End-Entwicklung durch Node.js und unterstützt die Entwicklung der Vollstapel.

Die Rolle von C/C bei JavaScript -Dolmetschern und CompilernDie Rolle von C/C bei JavaScript -Dolmetschern und CompilernApr 20, 2025 am 12:01 AM

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

JavaScript in Aktion: Beispiele und Projekte in realer WeltJavaScript in Aktion: Beispiele und Projekte in realer WeltApr 19, 2025 am 12:13 AM

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

JavaScript und das Web: Kernfunktionalität und AnwendungsfälleJavaScript und das Web: Kernfunktionalität und AnwendungsfälleApr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Verständnis der JavaScript -Engine: ImplementierungsdetailsVerständnis der JavaScript -Engine: ImplementierungsdetailsApr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

See all articles

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),