Pular para o conteúdo

A primeira escola especializada em tecnologia do Alto Solimões, com corpo técnico formado na área.

Módulo 4: Dados e Funções

Métodos de Array

filter, map, reduce, find, some e every

Por que usar métodos funcionais?

Você já percorreu arrays com for. Métodos funcionais fazem a mesma coisa, só que em menos código.

Regra de ouro: eles nunca mudam o array original; sempre devolvem algo novo.

filter: selecionar elementos

Pense num filtro de café: só passa o que interessa.

const notas: number[] = [8.5, 7.0, 9.5, 6.0, 5.5];

const aprovados = notas.filter((nota) => nota >= 7);
console.log(aprovados); // → [8.5, 7.0, 9.5]

const reprovados = notas.filter((nota) => nota < 7);
console.log(reprovados); // → [6.0, 5.5]

A função retorna true (fica) ou false (sai).

map: transformar cada elemento

Como uma fábrica: entra uma coisa, sai outra.

const notas: number[] = [8.5, 7.0, 9.5, 6.0, 5.5];

const arredondadas = notas.map((nota) => Math.round(nota));
console.log(arredondadas); // → [9, 7, 10, 6, 6]

const comBonus = notas.map((nota) => nota + 0.5);
console.log(comBonus); // → [9.0, 7.5, 10.0, 6.5, 6.0]

reduce: acumular um valor

Imagina somar todas as compras do carrinho numa única conta. Isso é o reduce.

const notas: number[] = [8.5, 7.0, 9.5, 6.0, 5.5];

const soma = notas.reduce((acumulador, nota) => acumulador + nota, 0);
console.log(soma); // → 36.5

const média = soma / notas.length;
console.log(média); // → 7.3

Recebe dois argumentos: uma função (acumulador, elementoAtual) é o valor inicial (0).

Exemplo: contar votos

const votos: string[] = ["A", "B", "A", "C", "B", "A"];

const contagem = votos.reduce((acc, voto) => {
acc[voto] = (acc[voto] || 0) + 1;
return acc;
}, {} as Record<string, number>);

console.log(contagem); // → { A: 3, B: 2, C: 1 }

find: encontrar o primeiro

Devolve o primeiro elemento que bate com a condição. Se não achar, devolve undefined.

const notas: number[] = [8.5, 7.0, 9.5, 6.0, 5.5];

const primeiraBaixa = notas.find((nota) => nota < 7);
console.log(primeiraBaixa); // → 6.0

const notaDez = notas.find((nota) => nota === 10);
console.log(notaDez); // → undefined

some e every: verificar condições

const notas: number[] = [8.5, 7.0, 9.5, 6.0, 5.5];

// some - ALGUM satisfaz?
const temReprovado = notas.some((nota) => nota < 7);
console.log(temReprovado); // → true

// every - TODOS satisfazem?
const todosAprovados = notas.every((nota) => nota >= 7);
console.log(todosAprovados); // → false

Ambos devolvem true ou false.

Encadeando métodos

Você pode ligar um método no outro, como peças de Lego:

const números: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const resultado = números
.filter((n) => n % 2 === 0) // → [2, 4, 6, 8, 10]
.map((n) => n * 3) // → [6, 12, 18, 24, 30]
.reduce((acc, n) => acc + n, 0); // → 90

console.log(resultado); // → 90

Referências

Testa o que você leu

4 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.

Pergunta 1 de 4
O que o método `filter` devolve?