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 filter para selecionar números > 25.
  • Usar reduce para 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

  1. Declaramos o array numeros com os valores dados.
  2. Aplicamos filter(num => num > 25) para obter um novo array apenas com os números maiores que 25: [30, 40, 50, 60].
  3. Encadeamos .reduce((acumulador, num) => acumulador + num, 0) no array filtrado.
  4. O reduce percorre o array, somando cada número ao acumulador, começando com 0.
  5. O resultado final (180) é armazenado em soma e 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 o 0 funciona 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 }) retorna undefined; use return acc + num ou 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