← Назад к вопросам

Что делает метод map в JavaScript?

2.0 Middle🔥 181 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Метод map() в JavaScript: трансформация массивов

Метод map() — это один из самых важных и часто используемых методов в JavaScript для работы с массивами. Он принадлежит к семейству функций высшего порядка (Higher-Order Functions), поскольку принимает другую функцию как аргумент. Его основная задача — создать новый массив, путем применения предоставленной функции к каждому элементу исходного массива.

Ключевые характеристики и поведение

  1. Трансформация без изменения оригинала: map() не изменяет исходный массив, на котором он вызван. Это принцип иммутабельности (immutability). Он возвращает совершенно новый массив той же длины.
  2. Возвращает новый массив: Результатом вызова всегда является новый массив. Это важно для дальнейшей работы с данными без побочных эффектов.
  3. Сохраняет длину массива: Количество элементов в новом массиве всегда равно количеству элементов в исходном. Если исходный массив имеет 5 элементов, результат map() также будет содержать 5 элементов (возможно, преобразованных или даже undefined).
  4. Применяет функцию к каждому элементу: Функция-обработчик (callback) выполняется последовательно для каждого элемента массива, от индекса 0 до length - 1.

Синтаксис и параметры

Синтаксис метода выглядит следующим образом:

const newArray = originalArray.map(callbackFunction(currentValue, index, array), thisArg);

Аргументы функции-обработчика (callback):

  • currentValue (обязательный): текущий элемент массива, который обрабатывается.
  • index (опционально): индекс текущего элемента в массиве.
  • array (опционально): ссылка на исходный массив, по которому осуществляется итерация.

Опциональный параметр thisArg позволяет задать значение this внутри callback-функции.

Практические примеры использования

Пример 1: Базовая трансформация данных

const numbers = [1, 2, 3, 4];
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8]
console.log(numbers); // [1, 2, –, 4] (оригинал не изменен)

Пример 2: Использование индекса в преобразовании

const fruits = ['apple', 'banana', 'cherry'];
const indexedFruits = fruits.map((fruit, idx) => `${idx + 1}: ${fruit}`);
console.log(indexedFruits); // ['1: apple', '2: banana', '3: cherry']

Пример 3: Преобразование объектов в массиве (частая задача в React)

const users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];
const userNames = users.map(user => user.name);
console.log(userNames); // ['Alice', 'Bob', 'Charlie']

Пример 4: Что происходит, если callback ничего не возвращает?

const arr = [1, 2, 3];
const result = arr.map(num => {
  console.log(num); // 1, 2, 3
  // Функция не имеет return
});
console.log(result); // [undefined, undefined, undefined]

Сравнение с другими методами массивов

  • forEach(): выполняет функцию для каждого элемента, но не возвращает новый массив. Используется для операций, не требующих трансформации (например, логирование).
  • filter(): возвращает новый массив, но только с элементами, прошедшими проверку (callback возвращает true). Длина нового массива может быть меньше.
  • reduce(): "сворачивает" массив в одно единственное значение на основе аккумулятора.

Особенности и лучшие практики

  1. Чистые функции: Для map() идеально использовать чистые функции (pure functions) — callback, которая зависит только от своих аргументов и не имеет побочных эффектов. Это делает код более predictable и testable.
  2. Связь с React: Метод map() — основа рендеринга списков в React. Каждый элемент массива данных преобразуется в React-элемент (например, <li>).
    function TodoList({ tasks }) {
      return (
        <ul>
          {tasks.map(task => (
            <li key={task.id}>{task.text}</li>
          ))}
        </ul>
      );
    }
    
  3. Обработка возможных undefined: Если исходный массив содержит "пустые" места (например, [1, , 3]), callback не будет вызван для этих элементов, но в новом массиве они сохранятся как "пустые". В результате получится [2, , 6].
  4. Производительность: map() оптимизирован в современных JS-движках, но создание нового массива — операция с памятью. Для очень больших массивов или в критических по производительности местах стоит оценивать альтернативы.

В итоге, метод map() — это мощный инструмент для декларативного программирования. Он позволяет четко выразить преобразование данных, избегая циклов for и временных переменных, делая код более читаемым, компактным и соответствующим современным парадигмам функционального программирования в JavaScript.