Capa do post

Criando um array de items únicos em javascript

4/28/2023

As vezes precisamos trabalhar com um array de itens únicos que o usuário insere, mas como todos nós sabemos, nem sempre o usuário segue exatamente o que falamos pra ele fazer, então sempre é bom verificar os dados antes de fazer algo.

Seguindo esse princípio, hoje vamos ver como pegar um array com itens duplicados ou não, e fazer uma verificação simples para criar um novo de itens únicos.

Suponhamos que temos um array de nomes pessoais como o seguinte:

const nomes = [
  'Ana',
  'Bernardo',
  'Clarisse',
  'Domingues',
  'Eduarda',
  'Clarisse',
  'Felipe',
  'Gis',
  'Domingues',
  'Clarisse',
]

Como podemos ver, Domingues se repete duas vezes e Clarisse mais de duas, o que para o nosso cenário não é muito legal.

Vamos fazer isso com um velho conhecido método — ou talvez nem tanto ―, o tal método filter. Nosso código será parecido com o seguinte:

nomes.filter((nome, index, originalArray) => {
  return originalArray.indexOf(nome) == index
}) // [ Ana, Bernardo, Clarisse, Domingues, Eduarda, Felipe, Gis ]

Pouco código, né?

Vamos entender como ele funciona:

  • O método filter recebe uma função callback que deve retornar um boolean e a chama uma vez para cada elemento do array.
  • O callback recebe o elemento atual, o índice dele e também o array original.
  • Pegamos o tal array original e chamamos outro método: indexOf.
  • Esse outro método retorna o índice do primeiro elemento que ele encontrar e for igual ao que passamos pra ele, ou retorna -1 se não achar nada.
  • Agora verificamos se o índice do elemento que indexOf achou é igual o atual elemento no método filter.
  • Se for igual, o método filter vai adicionar esse elemento ao novo array, se não, apenas ignora.

Viu como é simples?

Ok, se você for como eu deve tá pensando: mas não existe um jeito menos trabalhoso pra isso?

E sim, podemos fazer com bem menos código, vejamos abaixo:

Array.from(new Set(nomes)) // [ Ana, Bernardo, Clarisse, Domingues, Eduarda, Felipe, Gis ]

Explicação curta:

  1. A classe Set pega o array e toma para si apenas os elementos que ela não pegou ainda
  2. O método estático from() pega nossa instância de Set e transforma em um array

Ainda mais simples, não?

Bônus: Implementação em Python

Em Python também podemos fazer algo bem similar ao último caso, vejamos abaixo:

nomes = [
  'Ana',
  'Bernardo',
  'Clarisse',
  'Domingues',
  'Eduarda',
  'Clarisse',
  'Felipe',
  'Gis',
  'Domingues',
  'Clarisse',
]

print(list(set(nomes))) # ['Bernardo', 'Domingues', 'Clarisse', 'Eduarda', 'Gis', 'Ana', 'Felipe']

E este infelizmente é o fim, espero que tenhamos aprendido coisas novas hoje.

Obrigado por chegar até aqui!

Onde me encontrar