Pular para o conteúdo

JavaScript - converter uma array para valores únicos

Dica publicada em Javascript / Introdução
Fábio Berbert de Paula fabio
Hits: 3.505 Categoria: Javascript Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

O comando recode

Convertendo texto em arte ASCII com Vim + Figlet

Como personalizar o thumbnail de seu site no Facebook

Substituindo o sleep por um belo cronômetro regressivo

Como converter áudio em texto usando OpenIA

Como corrigir erros de acentuação em códigos HTML, PHP ou JavaScript

Aprendendo HTML

Ativando Player HTML5 no YouTube

Comandos rápidos para Mozilla/Firefox

Mensagens criptografadas

#1 Comentário enviado por removido em 17/11/2020 - 22:38h
Não conhecia o Set!

Boa dica!

Contribuir com comentário

Entre na sua conta para comentar.