Фишка: Array.reduce() — универсальный метод для свёртки массива
Этот метод последовательно обрабатывает каждый элемент массива, накапливая единый результат — число, строку, объект или даже новый массив. Мощный инструмент для трансформации данных.
// Суммирование чисел
const numbers = [10, 20, 30, 40];
const sum = numbers.reduce((acc, num) => acc + num, 0);
console.log(sum); // → 100
// Преобразование массива в объект
const users = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
{ id: 3, name: "Charlie" }
];
const usersById = users.reduce((acc, user) => {
acc[user.id] = user.name;
return acc;
}, {});
console.log(usersById);
// → { 1: "Alice", 2: "Bob", 3: "Charlie" }
// Группировка элементов по условию
const fruits = ["apple", "banana", "apple", "orange", "banana", "apple"];
const fruitCount = fruits.reduce((acc, fruit) => {
acc[fruit] = (acc[fruit] || 0) + 1;
return acc;
}, {});
console.log(fruitCount);
// → { apple: 3, banana: 2, orange: 1 }
// Функциональная обработка: фильтрация + трансформация за один проход
const products = [
{ name: "Laptop", price: 1000, inStock: true },
{ name: "Mouse", price: 25, inStock: false },
{ name: "Keyboard", price: 80, inStock: true }
];
const availableProductNames = products.reduce((acc, product) => {
if (product.inStock) {
acc.push({ name: product.name, price: product.price });
}
return acc;
}, []);
console.log(availableProductNames);
// → [{ name: "Laptop", price: 1000 }, { name: "Keyboard", price: 80 }]
Преимущества:
— Универсальность: заменяет map(), filter(), find() в сложных сценариях
— Мощное агрегирование: превращает массив во что угодно (объект, Map, число, строку)
— Один проход: фильтрация и трансформация за один обход массива
— Функциональный стиль: чистая функция без побочных эффектов
— Контроль аккумулятора: полная гибкость над накоплением результата
Ghostly Frontend | #фишки