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;
}
}
Спецификации
Совместимость с браузерами
| 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 IteratorIterator.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