Arrays e métodos (map, filter, reduce)
JavaScript • Módulo 2: Estruturas de dados • Codding — material para estudo offline
Aluno: ______________________________ Data: ____ / ____ / ______
Nesta aula, você vai compreender Arrays e métodos (map, filter, reduce) com explicação progressiva, exemplo resolvido, checagens e prática. Nada de apenas copiar: cada etapa prepara a próxima.
Objetivos da aula
- Explicar Arrays e métodos (map, filter, reduce) com suas próprias palavras
- Reconhecer as partes importantes em um exemplo real
- Identificar e corrigir os erros mais frequentes
- Aplicar o conteúdo em uma atividade prática
Pré-requisito: Leia a aula anterior do módulo se algum termo parecer novo. Você pode testar o exemplo antes de continuar. • Duração: 50–75 min
Explicação passo a passo
1. O que é Arrays e métodos (map, filter, reduce)
Listas guardam valores em ordem, acessados por índice. Dicionários (objetos) guardam pares chave→valor, acessados por nome. Escolher a estrutura certa resolve metade do problema antes do primeiro laço.
Checkpoint: Qual método devolve um novo array com a mesma quantidade de itens transformados? — Resposta: map
2. Como pensar antes de fazer
Índices começam em zero. O último item é tamanho - 1; acessar tamanho direto estoura o limite. Esse é o erro 'index out of range'.
Dica: Não decore a forma. Tente explicar com suas palavras qual problema “Arrays e métodos (map, filter, reduce)” resolve.
3. Exemplo completo, do início ao resultado
map transforma cada item (mesma quantidade de saída), filter seleciona itens (menos ou igual), reduce condensa a coleção em um único valor. Aprender esses três substitui a maioria dos laços manuais e deixa a intenção explícita.
const produtos = [
{ nome: "Mouse", preco: 80 },
{ nome: "Teclado", preco: 150 },
{ nome: "Monitor", preco: 900 },
];
const nomes = produtos.map((p) => p.nome);
const baratos = produtos.filter((p) => p.preco < 200);
const total = produtos.reduce((acc, p) => acc + p.preco, 0);
console.log(nomes); // ["Mouse","Teclado","Monitor"]
console.log(baratos.length); // 2
console.log(total); // 1130
const porNome = Object.fromEntries(produtos.map((p) => [p.nome, p.preco]));
console.log(porNome["Monitor"]); // 900 — busca direta| Trecho | O que faz |
|---|
const produtos = [ | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
{ nome: "Mouse", preco: 80 }, | Contribui para a transformação principal mostrada neste exemplo. |
{ nome: "Teclado", preco: 150 }, | Contribui para a transformação principal mostrada neste exemplo. |
{ nome: "Monitor", preco: 900 }, | Contribui para a transformação principal mostrada neste exemplo. |
]; | Contribui para a transformação principal mostrada neste exemplo. |
const nomes = produtos.map((p) => p.nome); | Percorre ou transforma uma sequência de valores. |
const baratos = produtos.filter((p) => p.preco < 200); | Percorre ou transforma uma sequência de valores. |
const total = produtos.reduce((acc, p) => acc + p.preco, 0); | Percorre ou transforma uma sequência de valores. |
Dica: map/filter/reduce dizem O QUE você quer; o laço diria apenas COMO. O dicionário porNome troca busca linear por acesso direto.
Checkpoint: Qual é o índice do último item de uma lista com 4 elementos? — Resposta: 3
4. Do detalhe para o todo
Use dicionário quando a busca é por identidade (por id, por nome) — é praticamente instantânea. Percorrer uma lista inteira para achar um item é O(n) e fica lento conforme os dados crescem.
5. Erros comuns e como corrigi-los
1. Acessar lista[tamanho] em vez de lista[tamanho - 1].
2. Modificar a lista enquanto a percorre (pula itens).
3. Usar filter quando queria find — um devolve lista, o outro devolve o item.
Dica: Quando algo der errado, compare uma diferença por vez com o exemplo. Evite mudar várias partes ao mesmo tempo.
Prática guiada
1. 1. Faça funcionar
Laboratório de Arrays e métodos (map, filter, reduce): execute o exemplo, identifique entrada, processamento e saída e altere pelo menos um valor para observar como o resultado muda.
const produtos = [
{ nome: "Mouse", preco: 80 },
{ nome: "Teclado", preco: 150 },
{ nome: "Monitor", preco: 900 },
];
const nomes = produtos.map((p) => p.nome);
const baratos = produtos.filter((p) => p.preco < 200);
const total = produtos.reduce((acc, p) => acc + p.preco, 0);
console.log(nomes); // ["Mouse","Teclado","Monitor"]
console.log(baratos.length); // 2
console.log(total); // 1130
const porNome = Object.fromEntries(produtos.map((p) => [p.nome, p.preco]));
console.log(porNome["Monitor"]); // 900 — busca diretaDica: Volte ao exemplo resolvido e compare a estrutura. Acessar lista[tamanho] em vez de lista[tamanho - 1].
2. 2. Preveja antes de testar
Sem executar, explique qual resultado o exemplo de Arrays e métodos (map, filter, reduce) deve produzir e qual parte é responsável por ele.
Minha previsão:
A parte responsável pelo resultado:
Como vou conferir:
Dica: Use o modelo mental da aula: entrada, transformação e evidência observável.
3. 3. Encontre e corrija o erro
Use o exemplo de Arrays e métodos (map, filter, reduce), identifique um risco citado na aula e registre ou implemente a correção.
const produtos = [
{ nome: "Mouse", preco: 80 },
{ nome: "Teclado", preco: 150 },
{ nome: "Monitor", preco: 900 },
];
const nomes = produtos.map((p) => p.nome);
const baratos = produtos.filter((p) => p.preco < 200);
const total = produtos.reduce((acc, p) => acc + p.preco, 0);
console.log(nomes); // ["Mouse","Teclado","Monitor"]
console.log(baratos.length); // 2
console.log(total); // 1130
const porNome = Object.fromEntries(produtos.map((p) => [p.nome, p.preco]));
console.log(porNome["Monitor"]); // 900 — busca diretaDica: Acessar lista[tamanho] em vez de lista[tamanho - 1].
4. 4. Aplique em um caso novo
Crie uma variação própria usando Arrays e métodos (map, filter, reduce). Mude os dados ou o cenário e demonstre que o resultado continua correto.
const produtos = [
{ nome: "Mouse", preco: 80 },
{ nome: "Teclado", preco: 150 },
{ nome: "Monitor", preco: 900 },
];
const nomes = produtos.map((p) => p.nome);
const baratos = produtos.filter((p) => p.preco < 200);
const total = produtos.reduce((acc, p) => acc + p.preco, 0);
console.log(nomes); // ["Mouse","Teclado","Monitor"]
console.log(baratos.length); // 2
console.log(total); // 1130
const porNome = Object.fromEntries(produtos.map((p) => [p.nome, p.preco]));
console.log(porNome["Monitor"]); // 900 — busca diretaDica: Mantenha a estrutura que já funcionou e altere uma decisão por vez.
Revisão
- Listas guardam valores em ordem, acessados por índice. Dicionários (objetos) guardam pares chave→valor, acessados por nome. Escolher a estrutura certa resolve metade do problema antes do primeiro laço.
- map/filter/reduce dizem O QUE você quer; o laço diria apenas COMO. O dicionário porNome troca busca linear por acesso direto.
- Evite: Acessar lista[tamanho] em vez de lista[tamanho - 1].
- Evite: Modificar a lista enquanto a percorre (pula itens).
Exemplo comentado
const produtos = [
{ nome: "Mouse", preco: 80 },
{ nome: "Teclado", preco: 150 },
{ nome: "Monitor", preco: 900 },
];
const nomes = produtos.map((p) => p.nome);
const baratos = produtos.filter((p) => p.preco < 200);
const total = produtos.reduce((acc, p) => acc + p.preco, 0);
console.log(nomes); // ["Mouse","Teclado","Monitor"]
console.log(baratos.length); // 2
console.log(total); // 1130
const porNome = Object.fromEntries(produtos.map((p) => [p.nome, p.preco]));
console.log(porNome["Monitor"]); // 900 — busca diretamap/filter/reduce dizem O QUE você quer; o laço diria apenas COMO. O dicionário porNome troca busca linear por acesso direto.
Erros comuns
- Acessar lista[tamanho] em vez de lista[tamanho - 1].
- Modificar a lista enquanto a percorre (pula itens).
- Usar filter quando queria find — um devolve lista, o outro devolve o item.
Quiz e gabarito completo
1. Qual método devolve um novo array com a mesma quantidade de itens transformados?
- a) filter
- b) map
- c) reduce
- d) find
Gabarito: b) map — map transforma item a item mantendo o tamanho.
2. Qual é o índice do último item de uma lista com 4 elementos?
- a) 4
- b) 3
- c) 0
- d) Depende da linguagem
Gabarito: b) 3 — Índices vão de 0 a tamanho - 1.
Codding • JavaScript • Arrays e métodos (map, filter, reduce) • Prova final e certificado em codding.lovable.app/cursos/javascript/prova