Logo

CopyPastWorld

Обучение программированию

Методы массивов в JavaScript: map, filter, reduce, find с реальными задачами

Полное практическое руководство по современным методам работы с массивами в JavaScript: иммутабельность, трансформация данных, цепочки вызовов и разбор reduce.

Обновлено: 05.10.2026•Время чтения: 11 мин•Команда CopyPastWorld
#JavaScript#Массивы#Руководство#Практика
Интерактивная практика

Модуль 05: JavaScript: структуры данных и функции

Закрепите алгоритмические навыки работы с массивами и объектами в нашей интерактивной песочнице с автотестами.

Попробовать в тренажере →
Размер шрифта для чтения:100% (16px)

Функциональный подход к обработке массивов — стандарт современной веб-разработки. Главное достоинство методов высшего порядка — декларативность, читаемость и иммутабельность (сохранение исходных данных в неизменном виде).


1. Сводная таблица методов массивов

МетодМутирует массив?Что возвращаетСценарий применения
map()❌ НетНовый массив той же длиныПреобразование каждого элемента
filter()❌ НетНовый отфильтрованный массивВыборка элементов по условию
reduce()❌ НетЕдиное агрегированное значениеПодсчет сумм, группировка, сборка словарей
find()❌ НетПервый найденный элемент или undefinedБыстрый поиск одного объекта
some()❌ НетБулево значение (true / false)Проверка «хотя бы один подходит»
every()❌ НетБулево значение (true / false)Проверка «все элементы подходят»

Золотое правило иммутабельности:
Методы map, filter, slice, reduce создают новые копии данных, не изменяя исходный массив. Методы push, pop, splice, sort мутируют массив на месте! В React всегда используйте иммутабельные методы, чтобы не сломать механизм обнаружения изменений.


2. map(): Трансформация каждого элемента

const products = [  
  { id: 1, name: 'Клавиатура', price: 5000 },  
  { id: 2, name: 'Мышь', price: 2500 },  
  { id: 3, name: 'Монитор', price: 25000 }  
];

// Получаем список названий:  
const titles = products.map(p => p.name);  
// ['Клавиатура', 'Мышь', 'Монитор']

// Применяем скидку 10%:  
const withDiscount = products.map(p => ({  
  ...p,  
  salePrice: p.price * 0.9  
}));  

3. filter(): Точечная выборка данных

// Выбираем только бюджетные товары (до 10 000 руб.):  
const affordable = products.filter(p => p.price <= 10000);  
// [{ id: 1, ... }, { id: 2, ... }]  

4. reduce(): Универсальный швейцарский нож

// 1. Подсчет суммарной стоимости корзины:  
const totalSum = products.reduce((acc, p) => acc + p.price, 0);  
// 32500

// 2. Превращение массива в словарь по ID (O(1) поиск):  
const productsById = products.reduce((acc, p) => {  
  acc[p.id] = p;  
  return acc;  
}, {});  

Совет эксперта:
Всегда явно передавайте второй аргумент initialValue в метод reduce (например 0 или {}). Без начального значения reduce упадет с фатальной ошибкой при вызове на пустом массиве.


5. find() против filter(): Внимание на производительность

// ⚡ БЫСТРО: прекращает поиск сразу после первого совпадения  
const monitor = products.find(p => p.id === 3);

// 🐢 МЕДЛЕННО: обходит весь массив целиком  
const monitorBad = products.filter(p => p.id === 3)[0];  

Совет эксперта по производительности:
Если вам нужен ровно один уникальный элемент, всегда выбирайте .find(). Он прекращает итерацию в тот момент, когда условие выполнено, экономя время CPU на больших объемах данных.


6. Конвейеры обработки данных (Method Chaining)

Методы можно объединять в выразительные декларативные цепочки:

const totalElectronicsSale = products  
  .filter(p => p.price < 20000)      // 1. Оставляем товары до 20 000  
  .map(p => p.price * 0.85)          // 2. Применяем скидку 15%  
  .reduce((sum, price) => sum + price, 0); // 3. Считаем сумму со скидкой  

Понравилась шпаргалка?

В платформе CopyPastWorld собрано более 400 интерактивных уроков с практическими заданиями, автотестами и поддержкой сообщества.