Функция map преобразует массив вызывая переданную функцию для каждого его элемента и формируя новый массив с полученными результатами при этом исходный массив остаётся неизменным, что обеспечивает иммутабельность для перебора элементов можно использовать цикл for или метод forEach временная сложность составляет O(n), где n — количество элементов массива метод применяют для чистой функциональной трансформации данных
Как реализовать функцию map?
Функция map преобразует массив вызывая переданную функцию для каждого его элемента и формируя новый массив с полученными результатами при этом исходный массив остаётся неизменным, что обеспечивает иммутабельность для…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Реализация функции 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 лишь выполняет перебор элементов и не возвращает набор преобразованных значений.