Freqüentemente, há uma matriz que contém valores duplicados e você deseja torná-los únicos. Por exemplo, você pode ter ["a", 1, "a", 2, "1", 1]
e deseja obter ["a", 1, 2, "1"]
.
Utilizando muitos recursos em JavaScript, como protótipos e funções anônimas, você pode obter esse resultado com 5 linhas de código:
Array.prototype.unique = function() {
return this.filter(function (value, index, self) {
return self.indexOf(value) === index;
});
}
Uso:
var arr = ['a', 1, 'a', 2, '1']
arr.unique(); // => ['a', 1, 2, '1']
Esta solução NÃO requer nenhuma dependência como jQuery ou prototype.js e funciona para arrays com tipos mistos!
Como funciona?
O método nativo
filter
fará um loop pela matriz e deixará apenas as entradas que passarem (ou seja, obterem otrue
valor de retorno) a função anônima de retorno de chamada fornecida.A função anônima de retorno de chamada retorna
true
se a entrada for a primeira ocorrência e emfalse
outro lugar. Ele usa oindexOf
método nativo que encontra o Ãndice da primeira ocorrência de uma entrada em um array.
Falando sobre filter
e indexOf
métodos nativos, que foram introduzidos em ECMA-262 5a edição padrão, o que significa que não são suportados em navegadores antigos (<IE9). Existem soluções alternativas para que filter e indexOf façam o mesmo método funcionar, mas não será mais um código de 5 linhas.
Referência: Este protocolo é baseado nesta resposta .