NUR LEISTUNG! Dieser Code ist wahrscheinlich 10x schneller als alle Codes hier * funktioniert in allen Browsern und hat auch die geringste Auswirkung auf den Speicher .... und mehr
Wenn Sie das alte Array nicht wiederverwenden müssen, müssen Sie übrigens die erforderlichen anderen Vorgänge ausführen, bevor Sie es in ein einzigartiges Array konvertieren. Dies ist wahrscheinlich der schnellste Weg, um dies zu tun, auch sehr kurz.
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
dann können Sie dies versuchen
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]
Ich habe mir diese Funktion ausgedacht, als ich diesen Artikel gelesen habe ...
http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
Ich mag die for-Schleife nicht. Es hat zu viele Parameter. Ich mag die while-- Schleife. while ist die schnellste Schleife in allen Browsern außer der, die wir alle so sehr mögen ... Chrome.
Trotzdem habe ich die erste Funktion geschrieben, die while verwendet. Und ja, sie ist etwas schneller als die im Artikel gefundene Funktion. Aber nicht genug.unique2()
nächster schritt moderne js verwenden. Object.keys
Ich habe die andere for-Schleife durch die Object.keys von js1.7 ersetzt ... etwas schneller und kürzer (in Chrome 2x schneller);). Nicht genug!. unique3()
.
Zu diesem Zeitpunkt dachte ich darüber nach, was ich wirklich in MEINER einzigartigen Funktion brauche. Ich brauche das alte Array nicht, ich möchte eine schnelle Funktion. Also habe ich 2 while-Schleifen + Spleißen verwendet.unique4()
Es ist nutzlos zu sagen, dass ich beeindruckt war.
Chrom: Die üblichen 150.000 Operationen pro Sekunde stiegen auf 1.800.000 Operationen pro Sekunde.
dh: 80.000 op / s gegenüber 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
Beweis
http://jsperf.com/wgu oder besser console.time ... microtime ... was auch immer verwenden
unique5()
soll Ihnen nur zeigen, was passiert, wenn Sie das alte Array behalten möchten.
Verwenden Sie nicht, Array.prototype
wenn Sie nicht wissen, was Sie tun. Ich habe gerade viel kopiert und vergangen. Verwenden Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
Sie diese Option, wenn Sie einen nativen Prototyp erstellen möchten. Beispiel: https://stackoverflow.com/a/20463021/2450730
Demo
http://jsfiddle.net/46S7g/
HINWEIS: Ihr altes Array wird nach diesem Vorgang zerstört / wird einzigartig.
Wenn Sie den obigen Code nicht lesen können, lesen Sie ein Javascript-Buch oder hier finden Sie einige Erklärungen zu kürzerem Code. https://stackoverflow.com/a/21353032/2450730
Einige verwenden indexOf
... nicht ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
für leere Arrays
!array.length||toUnique(array);