
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:
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.
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().
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.
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.


