このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Iterator.prototype.map()
Baseline 2025Newly available
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
map() はIterator インスタンスのメソッドで、マッピング関数によってそれぞれ変換されたイテレーターの要素を生成する新しいイテレーターヘルパーオブジェクトを返します。
In this article
構文
map(callbackFn)引数
callbackFnイテレーターによって生成された各要素に対して実行する関数。その返値はイテレーターヘルパーによって生成されます。関数は次の引数とともに呼び出されます。
返値
新しいイテレーターヘルパーオブジェクトです。イテレーターヘルパーのnext() メソッドが呼び出されるたびに、そのイテレーターヘルパーは基礎となるイテレーターから次の要素を取得し、callbackFn を適用し、その返値を返します。基礎となるイテレーターが完了すると、イテレーターヘルパーも完了します(next() メソッドは{ value: undefined, done: true } を生成します)。
解説
配列メソッドよりもイテレーターヘルパーのほうが優れている主な点は、遅延的であるということ、つまり、要求されたときにのみ次の値を生成するという意味です。これにより、不必要なコンピューター処理を避けることができ、また、無限イテレーターで使用することもできます。map() メソッドを使用すると、反復処理したときに変換された要素を生成する新しいイテレーターを作成することができます。
例
>map() の使用
次の例では、フィボナッチ数列の項を生成するイテレーターを作成し、それを各項を 2 乗した新しい数列に変換し、最初のいくつかの項を読み取ります。
function* fibonacci() { let current = 1; let next = 1; while (true) { yield current; [current, next] = [next, current + next]; }}const seq = fibonacci().map((x) => x ** 2);console.log(seq.next().value); // 1console.log(seq.next().value); // 1console.log(seq.next().value); // 4map() の for...of ループでの使用
map() は、イテレーターを手作業で作成しない場合に最も便利です。イテレーターも反復可能オブジェクトであるため、for...of ループを使用して、返されたヘルパーを反復処理することができます。
for (const n of fibonacci().map((x) => x ** 2)) { console.log(n); if (n > 30) { break; }}// Logs:// 1// 1// 4// 9// 25// 64This is equivalent to:
for (const n of fibonacci()) { const n2 = n ** 2; console.log(n2); if (n2 > 30) { break; }}仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-iterator.prototype.map> |