Da trilha de JavaScript Este conceito ainda não saiu como card do dia. ir para o card de hoje

JavaScript Funções Básico

map, filter e reduce

Os métodos map, filter e reduce são ferramentas poderosas para processar arrays em JavaScript. Eles permitem transformar, filtrar e agregar dados de forma declarativa, sem usar loops explícitos como for ou while. Isso torna o código mais legível e menos propenso a erros.

  • map: cria um novo array aplicando uma função a cada elemento do array original. O novo array tem o mesmo comprimento do original.
  • filter: cria um novo array contendo apenas os elementos que passam em um teste (função que retorna true ou false).
  • reduce: reduz o array a um único valor (número, string, objeto, etc.) aplicando uma função acumuladora da esquerda para a direita.

Esses métodos podem ser encadeados: o resultado de um map pode ser filtrado com filter, e o resultado pode ser reduzido com reduce. Além disso, find e some são úteis para buscar um elemento específico ou verificar se algum elemento satisfaz uma condição.

Todos esses métodos recebem uma função de callback que é chamada para cada elemento. A callback pode receber até três argumentos: o elemento atual, o índice e o array original. Para reduce, a callback também recebe o acumulador. É importante lembrar que map e filter não modificam o array original; eles retornam novos arrays.

Pontos-chave

  • map transforma cada elemento e retorna um novo array de mesmo tamanho.
  • filter seleciona elementos com base em uma condição e retorna um novo array.
  • reduce agrega todos os elementos em um único valor usando um acumulador.
  • É possível encadear map, filter e reduce para processar dados em etapas.
  • find retorna o primeiro elemento que satisfaz a condição, e some verifica se pelo menos um elemento satisfaz.
array_methods.js
// Exemplo prático: processar uma lista de produtos
const produtos = [
  { nome: 'Camiseta', preco: 50, quantidade: 2 },
  { nome: 'Calça', preco: 120, quantidade: 1 },
  { nome: 'Tênis', preco: 200, quantidade: 1 },
  { nome: 'Boné', preco: 30, quantidade: 3 }
];

// 1. map: criar array com nomes dos produtos
const nomes = produtos.map(produto => produto.nome);
console.log('Nomes:', nomes);

// 2. filter: produtos com preço acima de 80
const caros = produtos.filter(produto => produto.preco > 80);
console.log('Caros:', caros.map(p => p.nome));

// 3. reduce: calcular valor total do estoque (preco * quantidade)
const totalEstoque = produtos.reduce((acumulador, produto) => {
  return acumulador + (produto.preco * produto.quantidade);
}, 0);
console.log('Total do estoque: R$', totalEstoque);

// 4. encadeamento: nomes dos produtos caros em maiúsculas
const nomesCarosMaiusculos = produtos
  .filter(produto => produto.preco > 80)
  .map(produto => produto.nome.toUpperCase());
console.log('Nomes caros em maiúsculas:', nomesCarosMaiusculos);

// 5. find: encontrar o primeiro produto com quantidade > 1
const primeiroComEstoque = produtos.find(produto => produto.quantidade > 1);
console.log('Primeiro com mais de 1 unidade:', primeiroComEstoque.nome);

// 6. some: verificar se há algum produto com preço < 40
const temBarato = produtos.some(produto => produto.preco < 40);
console.log('Tem produto barato?', temBarato);

Exercícios

  1. 1
    Fácil

    Dobrar números com map

    Dado o array [1, 2, 3, 4, 5], use map para criar um novo array com cada número multiplicado por 2. Imprima o resultado no console.

    Resolver
  2. 2
    Médio

    Filtrar e reduzir

    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.

    Resolver
  3. 3
    Desafio

    Análise de dados com map, filter, reduce, find e some

    Dado um array de objetos representando produtos (nome, preço, quantidade), realize as seguintes operações:

    1. Use filter para obter apenas os produtos com preço > 100.
    2. Use map para criar um array com os nomes desses produtos em maiúsculas.
    3. Use reduce para calcular o valor total em estoque (preço * quantidade) de todos os produtos (não apenas os filtrados).
    4. Use find para encontrar o primeiro produto com quantidade === 0.
    5. Use some para verificar se há algum produto com preço < 50. Imprima os resultados de cada operação.

    Resolver

Continue estudando