Iterator.prototype.map()
map() 方法用於 Iterator 例項,它會返回一個新的 iterator helper 物件,該物件會根據對映函式對迭代器產生的每個元素進行轉換併產生(yield)這些轉換後的元素。
語法
js
map(callbackFn)
引數
callbackFn-
一個將為迭代器產生的每個元素執行的函式。其返回值將由 iterator helper 產生。該函式將以以下引數呼叫:
返回值
一個新的 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 |
瀏覽器相容性
載入中…