Реализуйте map-функцию для итератора, которая преобразует его значения, например умножает каждое случайное число на 2.

Верните генератор, который лениво получает значения исходного синхронного итератора и преобразует каждое перед yield.

Короткий ответ

Что ответить на собеседовании

Верните генератор, который лениво получает значения исходного синхронного итератора и преобразует каждое перед yield.

Подробный разбор

Ответ с пояснениями

Верните генератор, который лениво получает значения исходного синхронного итератора и преобразует каждое перед yield.

Обёртка делает iterable даже из объекта, имеющего только next; память O(1), бесконечный источник не вычисляется заранее.

function* mapIterator(iterator, transform) {
  const iterable = { [Symbol.iterator]: () => iterator };
  for (const value of iterable) yield transform(value);
}
// [...mapIterator([1, 2, 3].values(), n => n * 2)]
// [2, 4, 6]

При досрочном закрытии генератора for...of вызывает return исходного итератора, если он есть. Для async iterator потребуется отдельный вариант с for await.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее