Создайте массив TResult и последовательно добавляйте результат callback для каждого элемента. Generics связывают входной тип с типом параметра callback.
Создание собственного generic‑функционала map
Создайте массив 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 и подклассов здесь не воспроизводится.