Retirar duplicados de um array em JavaScript
-
Utilize o
Setpara remover duplicados em JavaScript com ECMAScript 6spreadsintaxe -
Utilize
Array.filter()para remover os Duplicados do JavaScript Array -
Utilizar
hashtablepara remover duplicação de um Array Primitivo em JavaScript -
Use as bibliotecas
_.uniq()Função deunderscoreeLoDashpara 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.