Método reduce: juntando todos os itens em um único resultado

Entenda como combinar todos os elementos de um array em um único valor (soma, média, etc.).

Até agora você viu métodos que transformam (map) e filtram (filter) listas.
Agora chegou um método muito poderoso: o reduce.

Pense no reduce como um cofrinho:

  • cada item da lista coloca uma contribuição;
  • no final, você tem um resultado acumulado.

Esse resultado pode ser um número, texto, objeto ou até outro array.


Para que serve o reduce?

O reduce percorre o array e vai acumulando um valor até gerar um único resultado final.

Exemplos comuns:

  • somar números;
  • calcular total de carrinho;
  • contar ocorrências;
  • juntar textos;
  • agrupar dados.

Sintaxe básica

const resultadoFinal = array.reduce((acumulador, itemAtual) => {
  return novoValorDoAcumulador;
}, valorInicial);

Partes importantes

  • acumulador: guarda o resultado parcial.
  • itemAtual: elemento atual do array.
  • valorInicial: valor com que o acumulador começa (muito recomendado).

Exemplo 1: somando números

const numeros = [10, 20, 30];

const somaTotal = numeros.reduce((acumulador, numero) => {
  return acumulador + numero;
}, 0);

console.log(somaTotal); // 60

Passo a passo:

  • começa com acumulador = 0
  • 0 + 10 = 10
  • 10 + 20 = 30
  • 30 + 30 = 60

Exemplo 2: total de carrinho

const precos = [29.9, 10, 5.5];

const total = precos.reduce((acc, preco) => acc + preco, 0);

console.log(total); // 45.4

Exemplo 3: contar itens por categoria

const frutas = ["maçã", "banana", "maçã", "uva", "banana", "maçã"];

const contagem = frutas.reduce((acc, fruta) => {
  acc[fruta] = (acc[fruta] || 0) + 1;
  return acc;
}, {});

console.log(contagem);
// { maçã: 3, banana: 2, uva: 1 }

Aqui o resultado final é um objeto.


reduce sem valor inicial: cuidado

Se você não passar valor inicial:

  • o primeiro item do array vira acumulador;
  • a iteração começa no segundo item;
  • em array vazio, pode gerar erro.

Por segurança e clareza, prefira passar valor inicial.


Diferença rápida com outros métodos

  • map: devolve novo array transformado.
  • filter: devolve novo array filtrado.
  • reduce: devolve um único resultado acumulado.

Boas práticas com reduce

  • Sempre pense: “qual é meu acumulador?”
  • Defina um valor inicial coerente (0, "", {}, []).
  • Use nomes claros (acc, total, contador).
  • Se a lógica ficar grande demais, extraia para função separada.

Resumo da lição

reduce é o método de “consolidar” dados: ele percorre a lista e entrega um resultado final acumulado.
Dominar reduce te ajuda a resolver problemas reais com mais elegância e menos código repetido.