Iterator.prototype.map()

实验性: 这是一个 实验性技术
在生产环境中使用此功能前,请仔细查看 浏览器兼容性表

map() 方法是 Iterator 实例的方法,它返回一个新的 迭代器助手,该助手会生成迭代器中的元素,每个元素都经过映射函数转换。

语法

js
map(callbackFn)

参数

callbackFn

对迭代器生成的每个元素执行的函数。其返回值由迭代器助手生成。该函数使用以下参数调用

element

正在处理的当前元素。

index

正在处理的当前元素的索引。

返回值

一个新的 迭代器助手。每次调用迭代器助手的 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 的浏览器中加载。

另请参阅