Como Eleminar Elementos Duplicados de um Array em JavaScript Instantaneamente
Trabalhar com coleções de dados no dia a dia quase sempre envolve lidar com registros repetidos em listas. Em JavaScript moderno (ES6+), você não precisa mais recorrer a laços de repetição complexos como for ou forEach para realizar essa limpeza. Utilizar a estrutura nativa Set em conjunto com o operador spread ou Array.from() resolve o problema em apenas uma linha de código, garantindo alto desempenho e legibilidade.
JavaScript
// Array original contendo valores duplicados
const linguagens = ['JavaScript', 'Python', 'JavaScript', 'TypeScript', 'Python', 'C#'];
// Método 1: Utilizando o Operador Spread (...) e Set (Mais comum e conciso)
const unicosSpread = [...new Set(linguagens)];
// Método 2: Utilizando Array.from() e Set (Ideal para encadeamento de métodos)
const unicosArrayFrom = Array.from(new Set(linguagens));
// Exemplo de uso prático funcionando
console.log('Array original:', linguagens);
console.log('Resultado com Spread:', unicosSpread);
// Saída: ['JavaScript', 'Python', 'TypeScript', 'C#']
console.log('Resultado com Array.from:', unicosArrayFrom);
// Saída: ['JavaScript', 'Python', 'TypeScript', 'C#']
Pontos-chave
- Funcionamento da estrutura
Set: A classeSeté uma coleção nativa de valores onde cada elemento só pode aparecer uma única vez. Ao passar um array para a instâncianew Set(), a remoção dos duplicados ocorre de forma automática e imediata. - Desempenho com Busca $O(1)$: A remoção via
Setpossui complexidade de tempo linear $O(n)$, o que é significativamente mais rápido para arrays grandes em comparação ao métodofilter()comindexOf(), que opera em $O(n^2)$. - Pegadinha da Comparação por Referência: Este método funciona de maneira ideal com tipos primitivos (
string,number,boolean). Para arrays compostos por objetos, oSetcompara referências de memória e não o conteúdo das propriedades, exigindo abordagens comoMapou a bibliotecalodash. - Conversão de Volta para Array: O resultado de
new Set()é uma estrutura iterável do tipoSet, não umArray. Por isso, é obrigatório utilizar o operador spread ([...]) ouArray.from()para converter a estrutura de volta para um array padrão.
