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étodosfilter()
emap()
. 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 ]