Ответ
Метод map() используется для трансформации (отображения) каждого элемента массива в новый элемент, создавая и возвращая новый массив той же длины. Это один из ключевых методов функционального программирования в JavaScript и Node.js.
Синтаксис и пример:
const newArray = array.map((currentValue, index, array) => {
// Возвращаем новое значение для newArray[index]
}, thisArg);
Практические примеры в Node.js:
-
Преобразование данных из БД для API-ответа:
const dbUsers = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]; const apiResponse = dbUsers.map(user => ({ userId: user.id, fullName: user.name.toUpperCase() })); // apiResponse: [{ userId: 1, fullName: 'ALICE' }, ...] -
Извлечение конкретных полей из массива объектов:
const requests = [{ url: '/api' }, { url: '/users' }]; const urls = requests.map(req => req.url); // ['/api', '/users'] -
Нормализация данных:
const stringIds = ['123', '456', '789']; const numericIds = stringIds.map(id => parseInt(id, 10)); // [123, 456, 789]
Ключевые особенности:
- Иммутабельный: Не изменяет исходный массив.
- Предсказуемый: Возвращает массив той же длины.
- Чистая функция: Колбэк должен быть без побочных эффектов (side-effects).
Не путать с forEach: forEach выполняет операцию для каждого элемента, но не возвращает новый массив. map предназначен именно для трансформации данных.
Ответ 18+ 🔞
А, ну слушай, вот этот map() — это вообще, бля, золотая жила в JavaScript, ебать мои старые костыли. Представь, у тебя есть массив, как мешок картошки. И тебе надо не просто её перебрать, а каждую картофелину, например, почистить, нарезать и обжарить. Вот map() — это твой личный повар-трансформер. Он берет каждый элемент, делает с ним что ты скажешь, и кладёт результат в новый, отдельный тазик. Исходная картошка в мешке остаётся нетронутой — это святое, иммутабельность, ёпта.
Синтаксис, если по-простому:
const новыйМассив = старыйМассив.map((текущийЭлемент, индекс, самМассив) => {
// Тут ты из текущего элемента делаешь что-то новое и возвращаешь это
}, thisArg); // этот thisArg — редко кто использует, честно говоря, но он есть
Смотри, где это в жизни пригождается, прямо в Node.js:
-
Выдрать из пользователей только нужные поля для ответа API. Чтоб лишнего не светить, понимаешь? Подозрение ебать чувствую, когда всё наружу торчит.
const пользователиИзБазы = [{ id: 1, name: 'Вася' }, { id: 2, name: 'Петя' }]; const ответДляФронта = пользователиИзБазы.map(user => ({ айдишник: user.id, имяПолное: user.name.toUpperCase() // И сразу капсом, чтоб солидно })); // ответДляФронта: [{ айдишник: 1, имяПолное: 'ВАСЯ' }, ...] -
Из кучи объектов выковырять одно поле. Типа, у тебя массив запросов, а тебе только URL'ы.
const запросы = [{ url: '/api' }, { url: '/users' }]; const адреса = запросы.map(req => req.url); // ['/api', '/users'] // Всё, больше ничего не надо. Красота, а не жизнь. -
Привести данные к нормальному виду. Например, строковые ID превратить в нормальные числа, а то потом в сравнениях нихуя не сработает.
const строковыеАйди = ['123', '456', '789']; const числовыеАйди = строковыеАйди.map(id => parseInt(id, 10)); // [123, 456, 789] // Теперь можно спокойно искать и сравнивать, без этих вот "123" == 123.
Важное, что надо запомнить, а то будешь выглядеть как манда с ушами:
- Он не портит исходник! Исходный массив остаётся как был. Это овердохуища важно.
- Что положил, то и получил. Новый массив будет ровно такой же длины. Не может он элемент проглотить или новый из воздуха сделать.
- Колбэк должен быть чистым. Не надо там в колбэке глобальные переменные менять или в базу писать. Его задача — взять элемент, вернуть новое значение. И всё. Чёрта в душу, в сердцу мать!
И главное — не путай с forEach! Это частая ошибка, чувак. forEach — это как пройтись по массиву и что-то сделать для каждого элемента (например, в консоль вывести или в файл записать). Он нихуя не возвращает, просто идёт и делает. А map() — он для трансформации, он возвращает новый массив. Если ты используешь map() и не используешь возвращаемый массив — ты делаешь что-то не то, скорее всего тебе нужен был forEach. Э, бошка думай!