Retirar duplicados de um array em JavaScript

Moataz Farid 12 outubro 2023
  1. Utilize o Set para remover duplicados em JavaScript com ECMAScript 6 spread sintaxe
  2. Utilize Array.filter() para remover os Duplicados do JavaScript Array
  3. Utilizar hashtable para remover duplicação de um Array Primitivo em JavaScript
  4. Use as bibliotecas _.uniq() Função de underscore e LoDash para remover duplicatas de arrays em JavaScript
Retirar duplicados de um array em JavaScript

Este tutorial irá explicar como podemos remover duplicados de um array em JavaScript usando diferentes métodos. Um dos métodos é passar o array alvo para o construtor da classe Set para devolver um array equivalente não duplicado. Outra forma é utilizar o método filter() do JavaScript Array e implementar a condição de teste na sua função de chamada de retorno.

Utilize o Set para remover duplicados em JavaScript com ECMAScript 6 spread sintaxe

Em Matemática, o array contém um grupo de elementos únicos, não duplicados. Em JavaScript, a classe Set pode obter todos esses elementos não duplicados a partir de um array.

Com ECMAScript 6, podemos utilizar o poder da sintaxe de propagação utilizando a classe Set para obter um novo array de elementos não duplicados do que enviamos para o construtor do Set().

var arr = [1, 2, 3, 4, 1, 2, 3, 1, 2, 3]

    var uniqueArr = [...new Set(arr)]

console.log(uniqueArr)

Resultado:

[1, 2, 3, 4]

Utilize Array.filter() para remover os Duplicados do JavaScript Array

A matriz JavaScript introduziu uma das funções de ordem superior chamada filter(), que faz loops em cada elemento do array, aplica uma condição de teste nela, e só devolve esse elemento se cumprir a condição. Esta condição de teste será implementada dentro da função chamada de retorno, passada como argumento ao método filter().

Podemos remover as duplicações do array, definindo a condição de teste para verificar se o índice do elemento actual em loop é a primeira ocorrência nessa matriz. A função filter() tomará o argumento extra pos que representará o índice do array do elemento durante a execução.

var arrTwo = ['Hello 1 ', ' Hello 2 ', 'Hello 1 ', ' Hello 2 ', 'Hello 1 again']

    const filteredArray = arrTwo.filter(function(ele, pos) {
      return arrTwo.indexOf(ele) == pos;
    })

console.log('The filtered array ', filteredArray);

Resultado:

The filtered array  (3) ["Hello 1 ", " Hello 2 ", "Hello 1 again"]

Se pudermos utilizar o JavaScript ECMAScript 6 sintaxe de seta, a remoção da operação duplicada será implementada de uma forma melhor.

var arrTwo =
    ['Hello 1 ', ' Hello 2 ', 'Hello 1 ', ' Hello 2 ', 'Hello 1 again'];
const filteredArray = arrTwo.filter((ele, pos) => arrTwo.indexOf(ele) == pos);
console.log('The filtered array', filteredArray);

Resultado:

The filtered array  (3) ["Hello 1 ", " Hello 2 ", "Hello 1 again"]

Utilizar hashtable para remover duplicação de um Array Primitivo em JavaScript

Se tivermos um array composto apenas de tipos primitivos como números [ 1, 2, 3, 4, 1, 2, 3 ] e quisermos remover duplicados desse array [ 1, 2, 3, 4 ] podemos implementar a nossa função filterArray() utilizando hashtables.

Iremos construir um objecto temporário chamado found que incluirá todos os valores não duplicados. Dentro da função filter, a nossa condição retornará false se o elemento já existir no objecto found; caso contrário, adicionaremos esse elemento ao objecto found com o valor true;

var arrThree =
    [
      'Hello 1 ', ' Hello 2 ', ' Hello 2 ', 'Welcome', 'Hello 1 again',
      'Welcome', 'Goodbye'
    ]

    function filterArray(inputArr) {
      var found = {};
      var out = inputArr.filter(function(element) {
        return found.hasOwnProperty(element) ? false : (found[element] = true);
      });
      return out;
    }

const outputArray = filterArray(arrThree);
console.log('Original Array', arrThree);
console.log('Filtered Array', outputArray);

Resultado:

Original Array ["Hello 1 ", " Hello 2 ", " Hello 2 ", "Welcome", "Hello 1 again", "Welcome", "Goodbye"]
Filtered Array ["Hello 1 ", " Hello 2 ", "Welcome", "Hello 1 again", "Goodbye"]

Use as bibliotecas _.uniq() Função de underscore e LoDash para remover duplicatas de arrays em JavaScript

Se já estivermos a utilizar qualquer um dos métodos da biblioteca underscore, podemos utilizar o método _.uniq(), uma vez que devolve apenas a primeira ocorrência do elemento do array de entrada.

var arrFive = [1, 2, 3, 1, 5, 2];

console.log('LoDash output', _.uniq(arrFive));
LoDash output [1, 2, 3, 5]

podemos importar a biblioteca a partir de aqui.

Artigo relacionado - JavaScript Array