Iterator.prototype.map()

基準線 2025
新推出

自 ⁨2025 年 3 月⁩ 起,此功能可在最新的裝置和瀏覽器版本上使用。此功能可能在舊裝置或瀏覽器上無法正常工作。

map() 方法用於 Iterator 例項,它會返回一個新的 iterator helper 物件,該物件會根據對映函式對迭代器產生的每個元素進行轉換併產生(yield)這些轉換後的元素。

語法

js
map(callbackFn)

引數

callbackFn

一個將為迭代器產生的每個元素執行的函式。其返回值將由 iterator helper 產生。該函式將以以下引數呼叫:

element

正在處理的當前元素。

index

正在處理的當前元素的索引。

返回值

一個新的 iterator helper 物件。每次呼叫 iterator helper 的 next() 方法時,它會從底層迭代器獲取下一個元素,應用 callbackFn,然後產生返回值。當底層迭代器完成時,iterator helper 也隨之完成(next() 方法會產生 { value: undefined, done: true })。

描述

迭代器助手(iterator helpers)相較於陣列方法的主要優勢在於它們是惰性的,這意味著它們只在被請求時才生成下一個值。這避免了不必要的計算,也使得它們可以與無限迭代器一起使用。map() 方法允許你建立一個新的迭代器,當被迭代時,它會產生轉換後的元素。

示例

使用 map()

以下示例建立了一個產生斐波那契數列各項的迭代器,將其轉換為一個每項都取平方的新序列,然後讀取前幾項。

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

在 for...of 迴圈中使用 map()

map() 在你不需要手動處理迭代器時最為方便。由於迭代器本身也是可迭代的,你可以使用 for...of 迴圈來迭代返回的 helper。

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

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

這等價於

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

規範

規範
ECMAScript® 2026 語言規範
# sec-iterator.prototype.map

瀏覽器相容性

另見