Heim > Web-Frontend > js-Tutorial > Hauptteil

Wozu dient der Javascript-Iterator?

WBOY
Freigeben: 2022-03-01 14:59:44
Original
2756 Leute haben es durchsucht

In JavaScript ist ein Iterator ein Entwurfsmuster, das zum Durchlaufen eines Containerobjekts verwendet wird, dh zum Abrufen der darin enthaltenen Daten. Der Iterator in js verfügt über eine next () -Methode, und jeder Aufruf gibt ein Objekt zurück ist „next:function(){return{value,done}}“.

Wozu dient der Javascript-Iterator?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, JavaScript-Version 1.8.5, Dell G3-Computer.

Was ist der Nutzen von Javascript-Iteratoren?

 Iterator ist ein Entwurfsmuster, das Containerobjekte wie verknüpfte Listen und Arrays durchlaufen kann, ohne sich um die Implementierungsdetails der Speicherzuweisung von Containerobjekten zu kümmern. Das einfache Verständnis besteht darin, dass wir die Daten einzeln abrufen können, ähnlich wie bei einem sich bewegenden Zeiger, uns jedoch mitteilen, wann sie enden. Auf diese Weise können wir tun, was wir tun müssen, nachdem wir die Daten erhalten haben.

Wie sieht ein Iterator in js aus?

In Javascript ist ein Iterator ein spezielles Objekt. Dieses Iteratorobjekt verfügt über eine next()-Methode und jeder Aufruf gibt ein Objekt (Ergebnisobjekt) zurück. Das Ergebnisobjekt verfügt über zwei Eigenschaften: Die eine ist „Wert“, die den nächsten zurückzugebenden Wert darstellt; die andere ist „fertig“, ein boolescher Wert, der wahr ist, wenn zum letzten Wert in der Sequenz iteriert wurde. Der Iterator speichert außerdem einen internen Zeiger, der auf die Position des Werts in der aktuellen Sammlung zeigt. Bei jedem Aufruf der next()-Methode wird der nächste verfügbare Wert zurückgegeben, ähnlich der Struktur des folgenden Objekts.

{
  next: function () {
        return {
            value:'',
            done: true / false
        }  
    }
}
Nach dem Login kopieren

Iterationsprotokoll

Mit der weiteren Verbesserung der Fähigkeiten der JavaScript-Sprache wurden einige neue Datentypen wie Map, Set, WeakMap usw. hinzugefügt. Um eine einheitliche Iteration dieser verschiedenen Datenstrukturen zu ermöglichen, es6 hat die Sache mit der Iterationsvereinbarung hinzugefügt.

Das Iterationsprotokoll ist keine neue integrierte Implementierung oder Syntax, sondern ein Protokoll. Diese Protokolle können von jedem Objekt implementiert werden, das bestimmten Konventionen folgt.

Das Iterationsprotokoll ist speziell in zwei Protokolle unterteilt: iterierbares Protokoll und Iteratorprotokoll.

Das einfache Verständnis ist, dass jedes Objekt in js durchlaufen werden kann, solange es das Iterationsprotokoll erfüllt.

Iterierbares Protokoll

Um ein iterierbares Objekt zu werden, muss ein Objekt die @@iterator-Methode implementieren. Dies bedeutet, dass das Objekt (oder ein Objekt in seiner Prototypenkette) eine Eigenschaft mit dem Schlüssel @@iterator haben muss, auf die über die Konstante Symbol.iterator zugegriffen werden kann:

Einfaches Verständnis: Sie möchten, dass etwas durchlaufen wird. Dann dies Das Ding muss einen @@iterator haben, auf den über Symbol.iterator zugegriffen werden kann ) Weg. Wenn die Anzahl der Werte begrenzt ist, wird nach der Iteration aller Werte ein Standardrückgabewert zurückgegeben.

Ein Objekt entspricht nur dann dem Iteratorprotokoll, wenn es eine next()-Methode mit der folgenden Semantik implementiert: Wozu dient der Javascript-Iterator?

Iterativer Prozess

Wenn ein Objekt iteriert werden muss (z. B. wenn ein for geschrieben wird). ..of-Schleife), zuerst wird seine @@iterator-Methode ohne Parameter aufgerufen (zu diesem Zeitpunkt sieht die zurückgegebene Struktur wie folgt aus: { next: function () {}}), und dann lautet der zurückgegebene Wert dieser Methode verwendet Der Iterator erhält den zu iterierenden Wert (tatsächlich bedeutet dies, die next()-Methode kontinuierlich aufzurufen). iterierbares Protokoll und das Iterator-Protokoll

Can-Iterationsprotokoll: Dieses Objekt muss über @@iterator verfügen, auf das über Symbol.iterator zugegriffen werden kann. Wozu dient der Javascript-Iterator?

Iterator-Protokoll: Es ist ein Objekt. Die next()-Funktion dieses Objekts gibt ein Objekt zurück. Dieses Objekt enthält zwei Attribute, eines ist der Wert und das andere ist fertig (boolean, egal ob es das letzte Element ist, der Wert kann weggelassen werden, wenn fertig wahr ist)

Das heißt, das Iteratorobjekt ist im Wesentlichen ein Zeigerobjekt. Verwenden Sie next() des Zeigerobjekts, um den Zeiger zu bewegen.

Benutzerdefinierte Iteration

Das Objekt implementiert keinen Iterator, daher kann das Objekt nicht durchlaufen werden. Um den oben genannten Iterator für das Objekt zu implementieren, gibt es normalerweise zwei Möglichkeiten Beim Schreiben müssen Sie zum einen den internen Status selbst steuern. Zum anderen müssen Sie den von der Generatorfunktion zurückgegebenen Iterator verwenden. Der Code lautet wie folgt:

Traditionelle Schreibmethode

let obj = {
  name: 'joel',
  adress: 'gz',
  [Symbol.iterator]: () => {
     // 这里不要用this, 因为是return fn, this 会丢失
    let index = -1, atrrList = Object.keys(obj);
    const objIterator = {
      next: () => {
        let result = ''
        index++
        if (index < atrrList.length) {
          result = {
            value: atrrList[index],
            done: false
          }
        } else {
          result = {
            done: true
          }
        }
        return result
      }
    }
    return objIterator
  }
}
for (const item of obj) {
    console.log(&#39;atrrs:&#39; + item + &#39;,value:&#39; + obj[item])
}
Nach dem Login kopieren

Methode zum Schreiben von Generatorfunktionen

// 为不可迭代的对象添加迭代器
let obj = {
  a: 1,
  b: 2
}
obj[Symbol.iterator] = function* () {
  let keys = Object.keys(obj);
  //取到key值的长度
  let len = keys.length;
  //定义循环变量
  let n = 0;
  //条件判断
  while (n <= len - 1) {
      yield { k: keys[n], v: obj[keys[n]] };
      n++
  }
}
//返回的是个对象的key和value
for (let { k, v } of obj) {
  console.log(k, v);
}
Nach dem Login kopieren
Verwandte Empfehlungen:

Javascript-Studien-Tutorial

Das obige ist der detaillierte Inhalt vonWozu dient der Javascript-Iterator?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!