ES6イテレータイテレータ

1.イテレータの概要

1.イテレータの概要

「コレクション」を表すJavaScriptの元のデータ構造は、主に配列(Array)とオブジェクト(Object)であり、ES6はMapとSetを追加します。Iteratorは、さまざまなデータ構造に統合されたアクセスメカニズムを提供するインターフェイスです。Iteratorインターフェースをデプロイすることにより、任意のデータ構造をトラバースできます。

2.イテレータの役割

イテレータには3つの機能があります。

  • さまざまなデータ構造に統一されたシンプルなアクセスインターフェイスを提供します
  • データ構造のメンバーは、特定の順序で並べ替えることができます
  • ES6は... ofループ用の新しいトラバーサルコマンドを作成しました。Iteratorインターフェイスは主に... of消費用です。

3.反復プロセス

  • 現在のデータ構造の開始位置を指すSymbol.iteratorを介してイテレータを作成します
  • 次に、nextメソッドを使用して、次の位置を指すように繰り返します。nextメソッドは、現在の位置にあるオブジェクトを返します。オブジェクトには、valueとdoneの2つの属性が含まれます。Valueは現在の属性の値です。Doneは決定に使用されます。トラバーサルが終了したかどうか。
  • 完了がtrueの場合、トラバーサルは終了します

4.Iteratorインターフェースを備えたネイティブデータ構造

  • アレイ
  • 地図
  • セットする
  • ストリング
  • TypedArray
  • 関数の引数オブ​​ジェクト
  • NodeListオブジェクト

5.Symbol.iteratorプロパティ

Symbol.iteratorプロパティを使用してデータ構造がデプロイされている限り、イテレータインターフェイスがあると見なされます

2、イテレータの使用法

1.基本的な使用法

const items = ["zero", "one", "two"];
const it = items[Symbol.iterator]();
 
it.next();
>{
    
    value: "zero", done: false}
it.next();
>{
    
    value: "one", done: false}
it.next();
>{
    
    value: "two", done: false}
it.next();
>{
    
    value: undefined, done: true}

2.カスタムトラバーサーオブジェクトのreturn()、throw()

return()メソッドの使用例は、for ... ofループが早期に終了した場合(通常はエラーまたはbreakステートメントが原因で)、return()メソッドが呼び出されることです。トラバーサルを完了する前にオブジェクトがリソースをクリーンアップまたは解放する必要がある場合は、return()メソッドをデプロイできます。

function readLinesSync(file) {
    
    
  return {
    
    
    [Symbol.iterator]() {
    
    
      return {
    
    
        next() {
    
    
          return {
    
     done: false };
        },
        return() {
    
    
          file.close();
          return {
    
     done: true };
        }
      };
    },
  };
}

次の2つの状況では、return()メソッドの実行がトリガーされます。

// 情况一
for (let line of readLinesSync(fileName)) {
    
    
  console.log(line);
  break;
}

// 情况二
for (let line of readLinesSync(fileName)) {
    
    
  console.log(line);
  throw new Error();
}

3、for ... ofループ

for ... ofループが使用できる範囲には、配列、SetおよびMap構造、いくつかの配列のようなオブジェクト(argumentsオブジェクト、DOM NodeListオブジェクトなど)、以下で説明するジェネレーターオブジェクト、および文字列が含まれます。

1.アレイ

JavaScriptの元のfor ... inループは、オブジェクトのキー名のみを取得でき、キー値を直接取得することはできません。ES6はfor ... ofループを提供し、トラバーサルがキー値を取得できるようにします。

var arr = ['a', 'b', 'c', 'd'];

for (let a in arr) {
    
    
  console.log(a); // 0 1 2 3
}

for (let a of arr) {
    
    
  console.log(a); // a b c d
}

おすすめ

転載: blog.csdn.net/qq_41466440/article/details/112647188