Методы итераторов — 11 мая 2026 г. в 06:19:29.806
Методы итераторов Если вас расстраивает отсутствие методов высшего порядка по типу map/filter у объектов-немассивов, то у меня для вас хорошая новость — уже достаточно давно (2023–2024 года) в стандарте JS появились так называемые хелперы итераторов. const age = new Map([["bob", 42], ["sam", 13], ["ben", 56]]).values() .map((age) => age * 10) .filter((age) => age > 150) .reduce((total, age) => total + age, 0); console.log(age); // 980 Что тут происходит: метод values создаёт итератор по значениям Map. Я мог бы создать итератор по ключам или по парам ключ-значение. Но самое главное — я могу создать итератор почти для всего, и у нас везде есть богатый набор методов, которые ещё и работают очень быстро. Вот полный список доступных на данный момент методов (у всех объектов итераторов!): .map(fn) — применяет функцию к каждому элементу и возвращает результат .filter(fn) — оставляет только те элементы, для которых функция вернула true .take(n) — возвращает первые n элементов и останавливается .drop(n) — пропускает первые n элементов, затем возвращает остальные .flatMap(fn) — применяет функцию к каждому элементу и разворачивает результат, если он итерируемый .reduce(fn, acc) — схлопывает все элементы в один результат, как reduce() у массивов .some(fn) — возвращает true, если хотя бы один элемент подходит под условие .every(fn) — возвращает true, только если все элементы подходят .find(fn) — возвращает первый подходящий элемент или undefined, если ничего не найдено .toArray() — собирает все оставшиеся значения в обычный массив Часть методов возвращает конечный результат, а другая часть — новый итератор, к которому снова можно навесить ещё методов. И всё это без создания промежуточных массивов! Но в отличие от своих «энергичных» братьев, итераторы по природе своей ленивы. Так что если вы напишете что-то вроде такого: // Никакой работы, кроме создания итератора, ещё не делается const i = iter.filter(filterSomething).map(mapSomething).take(10); console.log(...i); После нахождения 10 элементов работа закончится, и никаких промежуточных структур создано не будет. А это уже огромный аргумент в пользу итераторов. Так что начинайте использовать — это невероятно удобно! 🔥

