RENDIMIENTO SOLO! este código es probablemente 10 veces más rápido que todos los códigos aquí * funciona en todos los navegadores y también tiene el menor impacto en la memoria ... y más
si no necesita reutilizar la matriz anterior; por cierto, haga las otras operaciones necesarias antes de convertirla en única aquí, probablemente sea la forma más rápida de hacerlo, también muy breve.
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
entonces puedes probar esto
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]
Se me ocurrió esta función leyendo este artículo ...
http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
No me gusta el bucle for. tiene muchos parámetros. Me gusta el bucle while. while es el bucle más rápido en todos los navegadores, excepto el que a todos nos gusta tanto ... Chrome.
de todos modos, escribí la primera función que usa while. Y sí, es un poco más rápido que la función encontrada en el artículo. pero no lo suficiente.unique2()
El siguiente paso es usar js modernos. Object.keys
Reemplacé el otro bucle for con Object.keys de js1.7 ... un poco más rápido y más corto (en Chrome 2x más rápido);). ¡No es suficiente!. unique3()
.
En este punto estaba pensando en lo que realmente necesito en MI función única. No necesito la matriz anterior, quiero una función rápida. así que usé 2 while loops + splice.unique4()
Inútil decir que estaba impresionado.
cromo: las 150,000 operaciones habituales por segundo aumentaron a 1,800,000 operaciones por segundo.
es decir: 80,000 op / s vs 3,500,000 op / s
ios: 18,000 op / s vs 170,000 op / s
safari: 80,000 op / s vs 6,000,000 op / s
Prueba
http://jsperf.com/wgu o mejor usa console.time ... microtime ... lo que sea
unique5()
es solo para mostrarle lo que sucede si desea mantener la matriz anterior.
No lo uses Array.prototype
si no sabes lo que estás haciendo. Acabo de hacer un montón de copia y pasado. Úselo Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
si desea crear un prototipo nativo. Ejemplo: https://stackoverflow.com/a/20463021/2450730
Demo
http://jsfiddle.net/46S7g/
NOTA: su matriz anterior se destruye / se vuelve única después de esta operación.
si no puede leer el código anterior, pregunte, lea un libro de JavaScript o aquí hay algunas explicaciones sobre el código más corto. https://stackoverflow.com/a/21353032/2450730
algunos están usando indexOf
... no ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
para matrices vacías
!array.length||toUnique(array);