このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Iterator.prototype.map()

Baseline 2025
Newly 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 インスタンスのメソッドで、マッピング関数によってそれぞれ変換されたイテレーターの要素を生成する新しいイテレーターヘルパーオブジェクトを返します。

構文

js
map(callbackFn)

引数

callbackFn

イテレーターによって生成された各要素に対して実行する関数。その返値はイテレーターヘルパーによって生成されます。関数は次の引数とともに呼び出されます。

element

処理中の現在の要素です。

index

処理中の現在の要素のインデックスです。

返値

新しいイテレーターヘルパーオブジェクトです。イテレーターヘルパーの next() メソッドが呼び出されるたびに、そのイテレーターヘルパーは基礎となるイテレーターから次の要素を取得し、 callbackFn を適用し、その返値を返します。基礎となるイテレーターが完了すると、イテレーターヘルパーも完了します(next() メソッドは { value: undefined, done: true } を生成します)。

解説

配列メソッドよりもイテレーターヘルパーのほうが優れている主な点は、遅延的であるということ、つまり、要求されたときにのみ次の値を生成するという意味です。これにより、不必要なコンピューター処理を避けることができ、また、無限イテレーターで使用することもできます。 map() メソッドを使用すると、反復処理したときに変換された要素を生成する新しいイテレーターを作成することができます。

map() の使用

次の例では、フィボナッチ数列の項を生成するイテレーターを作成し、それを各項を 2 乗した新しい数列に変換し、最初のいくつかの項を読み取ります。

js
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); // 1
console.log(seq.next().value); // 1
console.log(seq.next().value); // 4

map() の for...of ループでの使用

map() は、イテレーターを手作業で作成しない場合に最も便利です。イテレーターも反復可能オブジェクトであるため、 for...of ループを使用して、返されたヘルパーを反復処理することができます。

js
for (const n of fibonacci().map((x) => x ** 2)) {
  console.log(n);
  if (n > 30) {
    break;
  }
}

// Logs:
// 1
// 1
// 4
// 9
// 25
// 64

This is equivalent to:

js
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

ブラウザーの互換性

関連情報