Médio JavaScript
Filtrar e reduzir
Enunciado
Dado o array de números [10, 20, 30, 40, 50, 60], use filter para selecionar apenas os números maiores que 25 e, em seguida, use reduce para somar esses números filtrados. Imprima a soma.
Requisitos
- Usar
filterpara selecionar números > 25. - Usar
reducepara somar os números filtrados. - Imprimir o resultado final.
Código inicial
const numeros = [10, 20, 30, 40, 50, 60];
// Seu código aqui
Saída esperada
180
Ver dica
Você pode encadear filter e reduce. O reduce precisa de um valor inicial para o acumulador, que pode ser 0.
Mostrar solução
const numeros = [10, 20, 30, 40, 50, 60];
const soma = numeros
.filter(num => num > 25)
.reduce((acumulador, num) => acumulador + num, 0);
console.log(soma);
Passo a passo
- Declaramos o array
numeroscom os valores dados. - Aplicamos
filter(num => num > 25)para obter um novo array apenas com os números maiores que 25:[30, 40, 50, 60]. - Encadeamos
.reduce((acumulador, num) => acumulador + num, 0)no array filtrado. - O
reducepercorre o array, somando cada número ao acumulador, começando com 0. - O resultado final (180) é armazenado em
somae impresso.
Por que funciona
O encadeamento permite que o resultado do filter seja imediatamente usado pelo reduce. O filter cria um novo array com os elementos que passam no teste, e o reduce agrega esses elementos em um único valor. O valor inicial 0 garante que a soma comece do zero e que o acumulador seja um número.
Erros comuns
- Esquecer o valor inicial do
reduce:reduce((acc, num) => acc + num)sem o0funciona se o array não estiver vazio, mas se estiver vazio, lança erro. Sempre forneça um valor inicial. - Confundir a ordem dos parâmetros: no
reduce, o primeiro parâmetro é o acumulador e o segundo é o elemento atual. Trocar a ordem resulta em erro ou resultado incorreto. - Não retornar no
reduce:reduce((acc, num) => { acc + num })retornaundefined; usereturn acc + numou a forma concisa.
Outra forma de resolver
Usar um loop for com uma condição if:
let soma = 0;
for (let i = 0; i < numeros.length; i++) {
if (numeros[i] > 25) soma += numeros[i];
}
Mas o encadeamento é mais declarativo.
Saída esperada
180