Как реализовать функцию map?

Функция map преобразует массив вызывая переданную функцию для каждого его элемента и формируя новый массив с полученными результатами при этом исходный массив остаётся неизменным, что обеспечивает иммутабельность для…

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

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

Функция map преобразует массив вызывая переданную функцию для каждого его элемента и формируя новый массив с полученными результатами при этом исходный массив остаётся неизменным, что обеспечивает иммутабельность для перебора элементов можно использовать цикл for или метод forEach временная сложность составляет O(n), где n — количество элементов массива метод применяют для чистой функциональной трансформации данных

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

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

Реализация функции map

  • Функция map преобразует массив
  • вызывая переданную функцию для каждого его элемента
  • и формируя новый массив с полученными результатами
  • при этом исходный массив остаётся неизменным, что обеспечивает иммутабельность
  • для перебора элементов можно использовать цикл for или метод forEach
  • временная сложность составляет O(n), где n — количество элементов массива
  • метод применяют для чистой функциональной трансформации данных

Пример на JS:

function map(arr, fn) {
const result = [];
for (let i = 0; i < arr.length; i++) {
result.push(fn(arr[i], i, arr));
}
return result;
}

Это классическая реализация, которая по сигнатуре и поведению максимально точно соответствует нативному Array.prototype.map.

Подробный ответ

Основной ответ

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

Ключевые моменты

  • Иммутабельность: исходный массив остаётся без изменений, поскольку функция map создаёт и возвращает новый массив.
  • Функция высшего порядка: в качестве аргумента принимается другая функция, задающая правила преобразования элементов.
  • Итерация с сохранением индекса: во многих случаях callback получает не только элемент, но и его индекс, благодаря чему доступны дополнительные варианты преобразования.
  • При самостоятельной реализации нужно учитывать модель вычислений: map может быть ленивым или жадным, причём в JavaScript он является жадным. Также следует корректно обрабатывать пустые массивы и null-значения.

Практический контекст

В JavaScript начиная с ECMAScript 5 метод map входит в состав Array.prototype. Например:

const numbers = [1, 2, 3];
const doubled = numbers.map(x => x * 2); // [2, 4, 6]

Реализовать map с нуля в JS можно следующим образом:

function map(array, fn) {
const result = [];
for (let i = 0; i < array.length; i++) {
result.push(fn(array[i], i, array));
}
return result;
}

В TypeScript для большей безопасности добавляют типизацию. В прикладных проектах map часто применяют, чтобы преобразовать данные перед рендерингом UI или обработкой массивов без мутаций, сделав код более понятным и надёжным.

Важно отличать map от forEach: map формирует и возвращает новый массив, тогда как forEach лишь выполняет перебор элементов и не возвращает набор преобразованных значений.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку