Método reduce() em JavaScript: como funciona, com exemplos

Método reduce() em JavaScript: como funciona, com exemplos
Neste artigo vou explicar-te como usar o método reduce em JavaScript: vamos ver, com exemplos, como funciona e quando o usar.
O método JavaScript reduce aplica uma função a cada elemento do array para reduzir esse array a um único valor.
Vejamos um exemplo:

javascript
let result = array.reduce((acc, v, i, a) => {
// devolve o novo valor à variável 
}, initVal);

// result - o valor único que é devolvido.
// array - o array sobre o qual a função de redução é executada.
// acc - o acumulador acumula todos os valores devolvidos.
// v - o valor atual a ser processado
// i - o índice atual do valor a ser processado.
// a - o array de origem
// initVal - um valor inicial fornecido de forma opcional.
// Se o valor inicial não for fornecido,
// o elemento 0 é usado como valor inicial.

O método JavaScript reduce pode ser visto como um ciclo for pensado especificamente para pegar nos valores de um array e construir com eles algo novo. Repara neste exemplo.

php
var array = [11, 12, 13, 14];
var sum = 0;
for(var i = 0; i  < array.length; i++) {
      sum += array[i];
 }

// sum = 50

O objetivo do código acima é encontrar a soma de todos os valores do nosso array. Funciona, sim, mas há uma forma mais simples de chegar ao mesmo resultado.

Vamos refatorar a função anterior com o método JavaScript reduce().

javascript
let array = [11, 12, 13, 14];
let sum = array.reduce((bcc, v) => bcc + v);
// sum = 50

Mesmo resultado, sem um único ciclo.

Usámos a variável bcc para representar a nossa concatenação. Como o reduce() percorre o array, o valor de bcc vai crescendo até a função terminar.

Lembras-te de eu ter dito que podíamos passar um valor inicial opcional? É simples de fazer. Vamos pegar no mesmo exemplo de há pouco: somamos o array, mas desta vez queremos partir de um valor inicial de 250.

Como fica o código quando começamos num valor inicial de 250? Basta ver o exemplo abaixo.

javascript
let array = [11, 12, 13, 14];
let sum = array.reduce((bcc, v) => bcc + v, 250);

Como podes ver, o código acima é quase igual ao do exemplo anterior. A única coisa que mudou é um segundo argumento a seguir ao callback. Passei o número 250 como ponto de partida. Agora, quando executamos a função, a soma dá 300.

Espero que te seja útil. Tens por aqui vários artigos sobre JavaScript, nomeadamente sobre arrays, por exemplo para saberes como juntar dois arrays em JavaScript.

JavaScript

Damien Flandrin Programador web desde 2010, criador da Gekkode e do Email Impact. Cada artigo é testado num projeto real antes de ser publicado. Contacto
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.