Iterator
イテレータ( Iterator ) は、反復処理するための特殊なオブジェクトです。順次データを取り出すためのオブジェクトを生成します。
String、RegExp、Generator、Map、Set、Segments といったオブジェクトを繰り返し文 for( values of array ){...} で利用可能にします。
配列 Array 型は for( values of array ){...} で利用可能ですがイテレータではありません。Array.prototype.values() メソッドでイテレータにすることはできます。
配列 Array 型のメソッド keys() や entries() はイテレータを返すとあります。イテレータでは for( values of array ){...} の他に next() メソッドで順次データを取り出します。
構文( Syntax )
イテレータ( Iterator ) は、反復処理を可能にするための特殊なオブジェクトです。String、RegExp、Generator、Map、Set、Segments、配列 といったオブジェクトを繰り返し可能な配列に変換します。
配列の場合は .values() メソッドなどでイテレータに変換できます。
例えば配列オブジェクトから .values() メソッドで Iterator オブジェクトが取得できます。
配列は Iterator ではありません。
配列の順を示す番号が keys() で取得できますが、これも Iterator です。
Iterator には next() というメソッドと、各データに value と done というプロパティがあります。
next() メソッドは Iterator のデータを順次取得できます。これらを使用して entries() からデータを取得します。
各データの value がデータです。done は処理するデータがあるか/ないかが分かります。
以下は配列 Array 型のメソッド entries() を使った例です。 entries() は配列番号とデータの Iterator オブジェクトを返します。
イテレーター( Iterator ) を返すメソッド
配列、String、正規表現、Generator、Map、Set、Segments ごとにイテレータを返す
配列には以下のメソッドがイテレータを返します。
- .entries()
- .keys()
- .values()
- .matchAll( regexp )
- [Symbol.matchAll]
ジェネレーターに関しては以下のジェネレータ
を参照してください。
反復可能なオブジェクトをイテレータに変換するメソッド [Symbol.iterator]()
があります。
[Symbol.iterator]()
は反復可能なオブジェクトに追加することでイテレータに変換します。
プロパティ( Property )
以下はイテレータでリストされた各データにおけるプロパティです。*イテレータ自身のプロパティではありません。
メソッド | 概要 |
---|---|
.value | 次の値。次がなければ undefined になる |
.done | 値がない場合は true になる。値がある場合は false になることに注意 |
メソッド
メソッド | 概要 |
---|---|
.next() | イテレータのデータを順次返す |
ジェネレータ( generator )
以下のようにジェネレータ( generator )で定義したオブジェクトを Iterator として使用する方法もあります。
function の後に*
が付くことでジェネレータ( generator )の定義であることを示します。
ジェネレータ( generator )は非同期通信で利用される関数です。ジェネレータで定義された引数を yield に定義した関数に渡すことができます。