Retirar duplicados de um array em JavaScript
-
Utilize o
Set
para remover duplicados em JavaScript com ECMAScript 6spread
sintaxe -
Utilize
Array.filter()
para remover os Duplicados do JavaScript Array -
Utilizar
hashtable
para remover duplicação de um Array Primitivo em JavaScript -
Use as bibliotecas
_.uniq()
Função deunderscore
eLoDash
para remover duplicatas de arrays 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.