Создание собственного generic‑функционала map

Создайте массив TResult и последовательно добавляйте результат callback для каждого элемента. Generics связывают входной тип с типом параметра callback.

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

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

Создайте массив TResult и последовательно добавляйте результат callback для каждого элемента. Generics связывают входной тип с типом параметра callback.

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

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

Условие

Разработайте собственную реализацию функции map, использующей обобщения (дженерики). Функция должна принимать два аргумента: массив элементов произвольного типа и функцию‑коллбэк, которая преобразует каждый элемент. В результате должна возвращаться новая коллекция, содержащая значения, полученные после применения коллбэка ко всем элементам исходного массива.

function myMap<T, U>(source: T[], transform: (item: T) => U): U[] {
    // реализация
}

Требования:

  • Функция должна быть полностью типобезопасной.
  • Не изменять исходный массив.
  • Обеспечить корректную работу с пустыми массивами и различными типами данных.
  • Не использовать встроенный Array.prototype.map.

Ответ

Создайте массив TResult и последовательно добавляйте результат callback для каждого элемента. Generics связывают входной тип с типом параметра callback.

function myMap<T, U>(source: T[], transform: (item: T) => U): U[] {
  const result: U[] = [];
  for (const item of source) result.push(transform(item));
  return result;
}

Пустой массив даёт пустой результат, исходный массив не меняется самой функцией. Предполагается обычный плотный массив; точное поведение встроенного map для дыр, изменения длины callback и подклассов здесь не воспроизводится.

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

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

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

Подробнее