A bola de neve: accumulator cresce a cada elemento.
snippetJavaScript
const sum = [1, 2, 3, 4, 5].reduce((acc, curr) => acc + curr, 0);console.log(sum); // 15
snippetJavaScript
array.reduce(callback(accumulator, currentValue, índice, array), initialValue)
Passo a passo
snippetJavaScript
[1, 2, 3, 4].reduce((acc, curr) => acc + curr, 0)// 0+1=1 → 1+2=3 → 3+3=6 → 6+4=10
Soma, média, min/max
snippetJavaScript
const numbers = [10, 20, 30, 40, 50];numbers.reduce((acc, n) => acc + n, 0); // 150numbers.reduce((acc, n) => acc + n, 0) / numbers.length; // 30numbers.reduce((acc, n) => (n > acc ? n : acc), numbers[0]); // maxMath.max(...numbers); // alternativa simples
Contagem e agrupamento
snippetJavaScript
const fruits = ["apple", "banana", "apple", "orange", "banana", "apple"]; fruits.reduce((acc, fruit) => { acc[fruit] = (acc[fruit] || 0) + 1; return acc;}, {});// { apple: 3, banana: 2, orange: 1 }
snippetJavaScript
people.reduce((acc, person) => { const dept = person.department; if (!acc[dept]) acc[dept] = []; acc[dept].push(person); return acc;}, {}); // ES2024+: Object.groupBy(people, p => p.department)
Objeto a partir de pares e flatten
snippetJavaScript
[["name", "Alice"], ["age", 25]].reduce((acc, [k, v]) => { acc[k] = v; return acc;}, {}); [[1, 2], [3, 4]].reduce((acc, arr) => acc.concat(arr), []);// ou nested.flat()