Funções de ordem superior
Uma função de ordem superior é aquela que recebe uma função como argumento ou retorna uma função. Em JavaScript as funções são "valores de primeira classe": podem ser passadas e retornadas como qualquer outro dado.
Os três pilares da programação funcional com arrays são funções de ordem superior:
map: transformar cada elemento
const numeros = [1, 2, 3];
const dobros = numeros.map((n) => n * 2); // [2, 4, 6]
filter: manter alguns deles
const pares = numeros.filter((n) => n % 2 === 0); // [2]
reduce: combinar tudo em um único valor
const soma = numeros.reduce((acumulado, n) => acumulado + n, 0); // 6
reduce recebe um acumulador e cada elemento, e retorna o novo acumulador.
O segundo argumento (0) é o valor inicial. É a mais poderosa: com reduce
você pode expressar tanto map quanto filter.
Essas funções não mutam o array original: retornam um novo, o que combina com a imutabilidade.
Exemplos
Encadear map, filter e reduce
const numeros = [1, 2, 3, 4, 5, 6];
const resultado = numeros
.filter((n) => n % 2 === 0) // [2, 4, 6]
.map((n) => n * n) // [4, 16, 36]
.reduce((a, n) => a + n, 0); // 56
console.log(resultado);