JavaScript - converter uma array para valores únicos

Publicado por Fábio Berbert de Paula em 17/11/2020

[ Hits: 2.835 ]

Blog: https://fabio.automatizando.dev

 


JavaScript - converter uma array para valores únicos



Direto ao ponto, como converter uma array em JavaScript para valores únicos? Para a solução vou usar dois métodos disponíveis em variáveis do tipo array:
  • filter
  • includes

Considerando que temos a seguinte array:

let distros = ['Debian', 'Ubuntu', 'openSUSE', 'Debian', 'Fedora', 'CentOS']

Quero remover os elementos repetidos da array. Vamos lá!

Breve explicação dos dois métodos que serão utilizados:

filter

Filtra elementos de uma array.

Sintaxe:

let newArray = arr.filter(callback(currentValue[, index[, array]]) {
  // return element for newArray, if true
}[, thisArg]);

Exemplo simples de uso do filter():

distros.filter( valor => valor === 'Fedora' || valor ==='Debian' )

Irá retornar uma array com apenas elementos iguais a Fedora ou Debian, em nosso caso:

[ 'Debian', 'Debian', 'Fedora']

includes

Verifica se um elemento existe em uma array.

Sintaxe:

arr.includes(valueToFind[, fromIndex])

Exemplo:

// retornará true
distros.includes('Ubuntu')

// retornará false porque Ubuntu está no índice 1
distros.includes('Ubuntu', 2)

Solução

Agora vamos juntar o conhecimento adquirido para executar o proposto pela dica:

distros.filter( (valor, indice) => !distros.includes(valor, indice + 1) )

O retorno será:

[ 'Ubuntu', 'openSUSE', 'Debian', 'Fedora', 'CentOS' ]

Explicando: estamos aplicando filter() à array "distros" e executando a função de callback capturando o valor e índice de cada elemento como parâmetro. O método filter() irá retornar uma nova array apenas com os elementos cuja função callback retornar "true". Neste caso somente os elementos que não se repitam posteriormente. Se existirem elementos duplicados, apenas o último permanecerá.

Solução alternativa

Outra solução que eu não poderia deixar de citar é convertendo o array para um Set. Trata-se de uma estrutura onde todos os elementos são únicos, logo ao fazer a conversão, os elementos duplicados naturalmente são removidos.

const distrosSet = new Set(distros)
// => Set(5) { 'Debian', 'Ubuntu', 'openSUSE', 'Fedora', 'CentOS' }

// converter o set para array:
distros = Array.from(distrosSet)

É possível reduzir a solução acima para uma linha única:

distros = Array.from(new Set(distros))

Até a próxima!

Outras dicas deste autor

MellowPlayer - Ouça Spotify, Deezer, Google Play, Tune In dentre outros

Visualizar a árvore de arquivos no terminal

Recarregar o .vimrc sem sair do Vim

Reproduzindo somente áudio com o mplayer

Exim4 - retry time not reached [Resolvido]

Leitura recomendada

Tutorial básico de SEO com o Google (SEO starter guide)

Sites e grupos para encontrar emprego de TI

Como instalar Deno no Linux

Tampermonkey - Executando JavaScript em Sites com o Chrome

Chromium e Firefox - Forma prática de abrir links em nova aba

  

Comentários
[1] Comentário enviado por removido em 17/11/2020 - 22:38h

Não conhecia o Set!

Boa dica!

[2] Comentário enviado por maurixnovatrento em 18/11/2020 - 07:24h


Muito legal.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts