Iterator.prototype.map()
语法
js
map(callbackFn)
参数
callbackFn
-
对迭代器生成的每个元素执行的函数。其返回值由迭代器助手生成。该函数使用以下参数调用
返回值
一个新的 迭代器助手。每次调用迭代器助手的 next()
方法时,它都会从底层迭代器获取下一个元素,应用 callbackFn
,并生成返回值。当底层迭代器完成时,迭代器助手也会完成(next()
方法生成 { value: undefined, done: true }
)。
描述
与数组方法相比,迭代器助手的最大优势在于它能够处理无限迭代器。对于无限迭代器,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
循环迭代返回的助手
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;
}
}
规范
规范 |
---|
迭代器助手 # sec-iteratorprototype.map |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。