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 |
浏览器兼容性
加载中…