Ответ
Метод 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): Всегда явно указывайте его. Это делает код безопаснее и предсказуемее, особенно с пустыми массивами.
Ответ 18+ 🔞
А, ну вот, опять этот reduce! Слушай, объясню тебе, как есть, без этих заумных учебников. Представь, что у тебя куча каких-то штук, а тебе надо из них сделать одну. Вот reduce — это как если бы ты собирал разбросанные по полу детали от конструктора в одну здоровенную хреновину. Или как если бы ты считал, сколько бабла потратил за месяц, складывая все чеки.
Синтаксис, блядь:
const result = array.reduce((accumulator, currentValue, index, array) => {
// Тут ты колдуешь и говоришь, как аккумулятор обновлять
return updatedAccumulator;
}, initialValue); // Вот это начало, стартовая точка! Не забудь, а то охуеешь потом.
Смотри, как это в жизни выглядит, ёпта:
-
Сумма, например, в корзине:
const cartItems = [{ price: 10 }, { price: 20 }, { price: 30 }]; const totalPrice = cartItems.reduce((sum, item) => sum + item.price, 0); // Итого: 60. Проще некуда, правда? -
Сделать из массива объект для быстрого поиска. Очень хитрая жопа, но полезная:
const users = [ { id: 'u1', name: 'John' }, { id: 'u2', name: 'Jane' } ]; const usersById = users.reduce((acc, user) => { acc[user.id] = user; // Запихнул юзера в объект по его же айдишнику return acc; }, {}); // Теперь чтобы найти John, не надо перебирать весь массив. Просто 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; }, {}); // Получится объект { pending: [...], shipped: [...] }. Всё разложено по полочкам, красота! -
Найти максимум. Да похуй, можно и
Math.max, но черезreduceтоже можно, если очень хочется:const readings = [23, 45, 17, 89, 32]; const maxReading = readings.reduce((max, val) => val > max ? val : max, -Infinity); // Прошёлся по всем, запомнил самого большого. 89, ясное дело.
И главное, чувак, про начальное значение (initialValue): Не будь распиздяем, всегда его указывай явно. Особенно когда массив может быть пустым. Представь: пустой массив, начального значения нет — и твой код накрылся медным тазом с ошибкой. А так, даже если массив пустой, reduce просто вернёт тебе этот самый initialValue, и всё будет спокойно. Доверия к пустым массивам — ноль ебать, так что перестрахуйся.