Spec-Zone.ru › JavaScript

Iterator.prototype.map()

Базовый уровень Недавно появился

Эта функция работает на новейших устройствах и версиях браузеров. Эта функция может не работать в старых устройствах или версиях браузеров. Она доступна во всех браузерах с марта 2025 года.

Метод map() экземпляров Iterator возвращает новый объект-помощник итератора, который генерирует элементы итератора, каждый из которых преобразован функцией отображения.

Синтаксис

map(callbackFn)

Параметры

callbackFn
Функция для выполнения для каждого элемента, сгенерированного итератором. Её возвращаемое значение генерируется помощником итератора. Функция вызывается со следующими аргументами:
element
Текущий обрабатываемый элемент.
index
Индекс текущего обрабатываемого элемента.

Возвращаемое значение

Новый объект-помощник итератора. Каждый раз, когда метод next() помощника итератора вызывается, он получает следующий элемент из базового итератора, применяет callbackFn и генерирует возвращаемое значение. Когда базовый итератор завершен, помощник итератора также завершается (метод next() генерирует { value: undefined, done: true }).

Описание

Основное преимущество помощников итераторов перед методами массивов заключается в том, что они ленивы, то есть они генерируют следующее значение только по запросу. Это позволяет избежать ненужных вычислений, а также позволяет использовать их с бесконечными итераторами. Метод map() позволяет создать новый итератор, который при итерации генерирует преобразованные элементы.

Примеры

Использование map()

Следующий пример создает итератор, который генерирует члены последовательности Фибоначчи, преобразует его в новую последовательность, где каждый член возведен в квадрат, а затем считывает первые несколько членов:

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

Использование map() с циклом for...of

map() наиболее удобен, когда вы не создаете итератор вручную. Поскольку итераторы также являются итерируемыми объектами, вы можете выполнить итерацию возвращенного помощника с помощью цикла for...of:

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

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

Это эквивалентно:

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

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-iterator.prototype.map

Совместимость с браузерами

Desktop Mobile Server
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
map
122
117–119
122
117–119
131
108
103–105
18.4
122
117–119
131
81
78–79
18.4
26.0
24.0–25.0
122
117–119
18.4
1.1.31
1.39
22.0.0

Смотрите также

  • Полифилл для Iterator.prototype.map в core-js
  • Полифилл es-shims для Iterator.prototype.map
  • Iterator
  • Iterator.prototype.flatMap()
  • Array.prototype.reduce()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator/map

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API