Método reduce


O método reduce é uma função de ordem superior utilizada para reduzir os valores de um array a um único valor. Essa redução é realizada por meio de uma callback function que acumula os resultados sucessivamente.

Importante

A partir do método reduce(), é possível realizar as mesmas operações que os métodos filter() e map(). No entanto, essa prática não é recomendada, pois pode prejudicar a legibilidade do código.

Sintaxe

array.reduce((acumulador, valorAtual, indiceAtual, arrayOriginal) => {
  // Código ...
 
  return acumulador;
}, valorInicial);

O parâmetro valorInicial é opcional. Se não for especificado, o JavaScript usará o primeiro elemento do array como valor inicial.

Exemplos

const numbers = [5, 50, 80, 1, 2, 3, 5, 8, 7, 11, 15, 22, 27];
 
const total = numbers.reduce(function (acumulador, numero) {
  acumulador += numero;
  return acumulador;
}, 0);
 
console.log(total);
// 236
const people = [
  { name: "Luiz", age: 62 },
  { name: "Maria", age: 23 },
  { name: "Eduardo", age: 55 },
  { name: "Letícia", age: 19 },
  { name: "Rosana", age: 32 },
  { name: "Wallace", age: 47 },
];
 
const oldestPerson = people.reduce(function (acumulador, pessoa) {
  if (acumulador.age > pessoa.age) return acumulador;
 
  return pessoa;
});
 
console.log(oldestPerson);
// { name: 'Luiz', age: 62 }

Simulação do método filter

const numbers = [5, 50, 80, 1, 2, 3, 5, 8, 7, 11, 15, 22, 27];
 
const total = numbers.reduce(function (acumulador, numero) {
	if (numero % 2 === 0) acumulador.push(numero);
	
	return acumulador;
}, []);
 
console.log(total); // [ 50, 80, 2, 8, 22 ]

Simulação do método map

const numbers = [5, 50, 80, 1, 2, 3, 5, 8, 7, 11, 15, 22, 27];
 
const total = numbers.reduce(function (acumulador, numero) {
	acumulador.push(numero * 2);
	
	return acumulador;
}, []);
 
console.log(total);
 
// [ 10, 100, 160,  2,  4,  6, 10,  16,  14, 22, 30, 44, 54 ]

Referências