Remover duplicatas de arrays é uma tarefa comum em JavaScript. Abaixo vão alguns métodos bem eficazes para fazer isso.
Método 1: usando Set (recomendado)
A forma mais simples e geralmente mais rápida de remover duplicatas é usando Set:
Prós:
- Limpo e direto
- Boa performance O(n)
- Funciona bem com valores primitivos
Contras:
- Só funciona com valores primitivos (números, strings, booleanos)
- Objetos são comparados por referência
Método 2: usando Filter
Útil em cenários mais específicos, ou quando você quer manter a primeira ocorrência:
Prós:
- Mais flexível para lógica customizada
- Fácil de entender
Contras:
- Menos performático O(n²) por causa do
indexOf
Método 3: usando Reduce
Uma abordagem funcional usando reduce:
Prós:
- Estilo de programação funcional
- Pode ser combinado com outras transformações
Contras:
- Menos performático por causa do
includes - Mais verboso
Método 4: para objetos (usando Map)
Quando você está lidando com objetos, geralmente precisa comparar por uma propriedade específica:
Prós:
- Funciona com objetos
- Você escolhe qual propriedade define a unicidade
- Boa performance
Contras:
- Sintaxe um pouco mais complexa
- Mantém a última ocorrência (dá pra ajustar para manter a primeira)
Comparação de performance
Em arrays grandes (10.000+ itens):
- Set: ~1ms (mais rápido)
- Map (para objetos): ~2ms
- Reduce: ~50ms
- Filter: ~100ms (mais lento)
Recomendação
- Use Set para valores primitivos (números, strings, booleanos)
- Use Map para objetos quando precisar remover duplicatas por uma propriedade específica
- Use Filter ou Reduce só quando você precisar de lógica customizada ou estiver lidando com arrays pequenos
Nota: todos esses métodos criam um array novo. Se você precisa modificar o array original no lugar, vai precisar de uma abordagem diferente.