YALNIZCA PERFORMANS! Bu kod muhtemelen burada tüm kodlardan 10 kat daha hızlı * tüm tarayıcılarda çalışır ve aynı zamanda en düşük bellek etkisi vardır .... ve daha fazlası
eski diziyi yeniden kullanmanız gerekmiyorsa; btw, onu benzersiz hale dönüştürmeden önce gerekli diğer işlemleri yapın, muhtemelen bunu yapmanın en hızlı yolu, aynı zamanda çok kısa.
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
o zaman bunu deneyebilirsin
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]
Bu işlevi bu makaleyi okuyarak buldum ...
http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
For döngüsünü sevmiyorum. birçok parametreye sahip. while döngüsü gibi. while, hepimizin çok sevdiği tarayıcı dışında tüm tarayıcılarda en hızlı döngü ... chrome.
Neyse ise while kullanan ilk işlevi yazdı.Ve evet bu makalede bulunan işlevden biraz daha hızlı. ama yeterli değil.unique2()
sonraki adım modern js kullanın. Object.keys
i döngü için js1.7's Object.keys ile değiştirdi ... biraz daha hızlı ve daha kısa (krom 2x daha hızlı);). Yeterli değil!. unique3()
.
bu noktada benzersiz fonksiyonumda gerçekten neye ihtiyacım olduğunu düşünüyordum. eski dizi gerekmez, hızlı bir fonksiyon istiyorum. bu yüzden 2 döngüler + ekleme kullandım.unique4()
Etkilendiğimi söylemek işe yaramaz.
krom: Saniyede normal 150.000 işlem saniyede 1.800.000 işleme sıçradı.
yani: 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
Kanıt
http://jsperf.com/wgu veya daha iyi bir kullanım console.time ... mikrotime ... her neyse
unique5()
sadece eski diziyi korumak istiyorsanız ne olacağını göstermektir.
Ne Array.prototype
yaptığını bilmiyorsan kullanmayın . sadece bir sürü kopya ve geçmiş yaptım. Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
Yerel bir prototip oluşturmak istiyorsanız kullanın. Örnek: https://stackoverflow.com/a/20463021/2450730
Demo
http://jsfiddle.net/46S7g/
NOT: Bu işlemden sonra eski diziniz imha edilir / bildirilir.
yukarıdaki kodu okuyamazsanız, bir javascript kitabı okuyun veya daha kısa kod hakkında bazı açıklamalar. https://stackoverflow.com/a/21353032/2450730
bazıları kullanıyor indexOf
... yapma ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
boş diziler için
!array.length||toUnique(array);