JavaScript/Map/prototype/Symbol.iterator
Map.prototype[@@iterator]()
は、Map オブジェクトのエントリを反復処理するためのイテレータを返すメソッドです。このメソッドは、Map を for...of
ループなどの反復処理構文で使用できるようにします[1]。
構文
map[Symbol.iterator]()
map
: 反復処理の対象となる Map オブジェクト。
例
for...of ループで Map を反復処理するプログラム
以下のプログラムは、for...of
ループを使用して Map の各エントリを反復処理します。
const map = new Map([ ['key1', 'value1'], ['key2', 'value2'], ['key3', 'value3'] ]); for (const entry of map) { console.log(entry); } // ['key1', 'value1'] // ['key2', 'value2'] // ['key3', 'value3']
このプログラムでは、for...of
ループを使用して Map map
の各エントリを反復処理しています。for...of
ループは内部的に Map.prototype[@@iterator]()
メソッドを使用しています。各エントリは [キー, 値] の配列として返されます。
分割代入を使用するプログラム
以下のプログラムは、分割代入を使用して Map の各キーと値を取得します。
const map = new Map([ ['key1', 'value1'], ['key2', 'value2'], ['key3', 'value3'] ]); for (const [key, value] of map) { console.log(`${key}: ${value}`); } // "key1: value1" // "key2: value2" // "key3: value3"
このプログラムでは、for...of
ループと分割代入を組み合わせて、Map の各エントリからキーと値を個別に取得しています。
注意点
- エントリの順序: Map のイテレータは、要素が挿入された順序でエントリを返します。
- entries() メソッド:
Map.prototype[)
はMap.prototype.entries( Symbol.iterator]
と同じ関数オブジェクトを参照します。 - 配列との違い: Map のイテレータは [キー, 値] の配列を返しますが、配列のイテレータは値のみを返します。
- 関連メソッド:
Map.prototype.keys()
はキーのみのイテレータを返し、Map.prototype.values()
は値のみのイテレータを返します。 - スプレッド構文: スプレッド構文 (
...
) は内部的にイテレータを使用するため、Map のエントリを配列に変換できます(例:[...map]
)。
脚註
- ↑ これは、Map オブジェクトの各キーと値のペアを順番に取得するために使用されます。