PERFORMANCE UNIQUEMENT! ce code est probablement 10 fois plus rapide que tous les codes ici * fonctionne sur tous les navigateurs et a également l'impact mémoire le plus faible .... et plus
si vous n'avez pas besoin de réutiliser l'ancien tableau; btw effectuer les autres opérations nécessaires avant de le convertir en unique ici est probablement le moyen le plus rapide de le faire, également très court.
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
alors vous pouvez essayer ceci
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]
Je suis venu avec cette fonction en lisant cet article ...
http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
Je n'aime pas la boucle for. il a de nombreux paramètres.j'aime la boucle while--. while est la boucle la plus rapide de tous les navigateurs, à l'exception de celle que nous aimons tous tellement ... chrome.
de toute façon j'ai écrit la première fonction qui utilise while.Et oui c'est un peu plus rapide que la fonction trouvée dans l'article.mais pas assez.unique2()
prochaine étape, utilisez js moderne. Object.keys
j'ai remplacé l'autre pour la boucle par les Object.keys de js1.7 ... un peu plus rapide et plus court (en chrome 2x plus rapide);). Pas assez!. unique3()
.
à ce stade, je pensais à ce dont j'avais vraiment besoin dans MA fonction unique. je n'ai pas besoin de l'ancien tableau, je veux une fonction rapide. j'ai donc utilisé 2 while boucles + épissure.unique4()
Inutile de dire que j'ai été impressionné.
chrome: les 150 000 opérations par seconde habituelles sont passées à 1 800 000 opérations par seconde.
soit: 80 000 op / s vs 3 500 000 op / s
ios: 18 000 op / s contre 170 000 op / s
safari: 80 000 op / s vs 6 000 000 op / s
Preuve
http://jsperf.com/wgu ou mieux utiliser console.time ... microtime ... peu importe
unique5()
est juste pour vous montrer ce qui se passe si vous souhaitez conserver l'ancien tableau.
Ne l'utilisez pas Array.prototype
si vous ne savez pas ce que vous faites. je viens de faire beaucoup de copie et de passé. À utiliser Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
si vous souhaitez créer un prototype natif.exemple : https://stackoverflow.com/a/20463021/2450730
Démo
http://jsfiddle.net/46S7g/
REMARQUE: votre ancienne baie est détruite / devient unique après cette opération.
si vous ne pouvez pas lire le code ci-dessus demandez, lisez un livre javascript ou voici quelques explications sur le code plus court. https://stackoverflow.com/a/21353032/2450730
certains utilisent indexOf
... ne pas ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
pour les tableaux vides
!array.length||toUnique(array);