Método Array.unique de JavaScript simples e puro com 5 linhas de código

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 filterfará um loop pela matriz e deixará apenas as entradas que passarem (ou seja, obterem o truevalor de retorno) a função anônima de retorno de chamada fornecida.

  • A função anônima de retorno de chamada retorna truese a entrada for a primeira ocorrência e em falseoutro lugar. Ele usa o indexOfmétodo nativo que encontra o índice da primeira ocorrência de uma entrada em um array.

Falando sobre filtere indexOfmé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 .