Ответ
Метод reduce() ("свертка") используется для последовательной агрегации (накопления) всех элементов массива в одно конечное значение. Это мощный инструмент для сложных преобразований данных в Node.js.
Синтаксис:
const result = array.reduce((accumulator, currentValue, index, array) => {
// Логика обновления аккумулятора
return updatedAccumulator;
}, initialValue); // Начальное значение аккумулятора
Практические примеры в Node.js:
-
Агрегация данных (сумма, произведение):
const cartItems = [{ price: 10 }, { price: 20 }, { price: 30 }]; const totalPrice = cartItems.reduce((sum, item) => sum + item.price, 0); // totalPrice = 60 -
Преобразование массива в объект (часто используется для кэшей или lookup-таблиц):
const users = [ { id: 'u1', name: 'John' }, { id: 'u2', name: 'Jane' } ]; const usersById = users.reduce((acc, user) => { acc[user.id] = user; return acc; }, {}); // usersById = { u1: {id:'u1', name:'John'}, u2: {...} } // Быстрый доступ: usersById['u1'] -
Группировка данных:
const orders = [ { status: 'pending', amount: 100 }, { status: 'shipped', amount: 200 }, { status: 'pending', amount: 50 } ]; const groupedByStatus = orders.reduce((groups, order) => { const status = order.status; if (!groups[status]) groups[status] = []; groups[status].push(order); return groups; }, {}); // groupedByStatus = { pending: [...], shipped: [...] } -
Поиск максимального/минимального значения:
const readings = [23, 45, 17, 89, 32]; const maxReading = readings.reduce((max, val) => val > max ? val : max, -Infinity);
Важность начального значения (initialValue): Всегда явно указывайте его. Это делает код безопаснее и предсказуемее, особенно с пустыми массивами.