Arrays e Métodos
map, filter, reduce, find e muito mais
Arrays em JavaScript são objetos dinâmicos que podem conter qualquer tipo de valor — inclusive misturados. O acesso por índice é O(1). Os métodos funcionais do ES6+ transformam a forma como trabalhamos com arrays: ao invés de loops imperativos, usamos pipelines declarativos.
Os métodos mais importantes: map() transforma cada elemento e retorna um novo array de mesmo tamanho. filter() seleciona elementos que passam em uma condição e retorna um novo array menor. reduce() acumula todos os elementos em um único valor. find() retorna o primeiro elemento que satisfaz a condição. some() verifica se pelo menos um elemento passa no teste. every() verifica se todos passam.
Todos esses métodos são imutáveis — não modificam o array original, mas retornam novos arrays ou valores. Para modificar o array em si, use push() (fim), pop() (remove do fim), unshift() (início), shift() (remove do início), splice() (inserção/remoção em posição específica). O spread operator (...arr) copia um array de forma imutável.
const numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// ── map: transforma cada elemento ────────────────
const dobrados = numeros.map(n => n * 2);
// [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
// ── filter: seleciona elementos ───────────────────
const pares = numeros.filter(n => n % 2 === 0);
// [2, 4, 6, 8, 10]
// ── reduce: acumula em um único valor ─────────────
const soma = numeros.reduce((acc, n) => acc + n, 0);
// 55
// ── find e findIndex ──────────────────────────────
const primeiro = numeros.find(n => n > 5); // 6
const indice = numeros.findIndex(n => n > 5); // 5
// ── Pipeline de operações (funcional) ────────────
const resultado = numeros
.filter(n => n % 2 === 0) // pega pares: [2,4,6,8,10]
.map(n => n ** 2) // eleva ao quadrado: [4,16,36,64,100]
.reduce((acc, n) => acc + n, 0); // soma: 220
// ── Spread e cópia imutável ───────────────────────
const original = [1, 2, 3];
const copia = [...original, 4, 5]; // [1,2,3,4,5]
const semPrimeiro = original.slice(1); // [2,3] — não muda original
// ── Desestruturação de arrays ─────────────────────
const [primeiro2, segundo, ...resto] = [10, 20, 30, 40, 50];
// primeiro2=10, segundo=20, resto=[30,40,50]Encadeie map → filter → reduce para transformações complexas. Cada método retorna um novo array, então você pode compor operações de forma legível e sem variáveis intermediárias.