SOLO PERFORMANCE! questo codice è probabilmente 10 volte più veloce di tutti i codici qui * funziona su tutti i browser e ha anche il minor impatto di memoria .... e altro
se non hai bisogno di riutilizzare il vecchio array; btw fai le altre operazioni necessarie prima di convertirlo in unico qui è probabilmente il modo più veloce per farlo, anche molto breve.
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
allora puoi provare questo
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 1];
function toUnique(a, b, c) { //array,placeholder,placeholder
b = a.length;
while (c = --b)
while (c--) a[b] !== a[c] || a.splice(c, 1);
return a // not needed ;)
}
console.log(toUnique(array));
//[3, 4, 5, 6, 7, 8, 9, 0, 2, 1]
Mi è venuta in mente questa funzione leggendo questo articolo ...
http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
Non mi piace il ciclo for. ha molti parametri. Mi piace il ciclo while--. mentre è il ciclo più veloce in tutti i browser tranne quello che a tutti noi piace così tanto ... Chrome.
comunque ho scritto la prima funzione che usa while. E sì, è un po 'più veloce della funzione trovata nell'articolo, ma non abbastanza.unique2()
il prossimo passo usa js moderni. Object.keys
ho sostituito l'altro per loop con Object.keys di js1.7 ... un po 'più veloce e più corto (in chrome 2x più veloce);). Non abbastanza!. unique3()
.
a questo punto stavo pensando a ciò di cui ho veramente bisogno nella MIA funzione unica. non ho bisogno del vecchio array, voglio una funzione veloce. così ho usato 2 mentre loops + splice.unique4()
Inutile dire che sono rimasto colpito.
cromo: le solite 150.000 operazioni al secondo sono balzate a 1.800.000 operazioni al secondo.
vale a dire: 80.000 op / s contro 3.500.000 op / s
iOS: 18.000 op / s vs 170.000 op / s
safari: 80.000 op / s contro 6.000.000 op / s
Prova
http://jsperf.com/wgu o meglio usa console.time ... microtime ... qualunque cosa
unique5()
è solo per mostrarti cosa succede se vuoi mantenere il vecchio array.
Non usare Array.prototype
se non sai cosa stai facendo. ho appena fatto un sacco di copia e passato. Utilizzare Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
se si desidera creare un prototipo nativo.esempio : https://stackoverflow.com/a/20463021/2450730
Demo
http://jsfiddle.net/46S7g/
NOTA: il tuo vecchio array viene distrutto / perché diventa unico dopo questa operazione.
se non riesci a leggere il codice sopra chiedi, leggi un libro javascript o qui ci sono alcune spiegazioni sul codice più breve. https://stackoverflow.com/a/21353032/2450730
alcuni stanno usando indexOf
... non ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
per array vuoti
!array.length||toUnique(array);