TYLKO WYDAJNOŚĆ! ten kod jest prawdopodobnie 10 razy szybszy niż wszystkie kody tutaj * działa na wszystkich przeglądarkach, a także ma najmniejszy wpływ na pamięć .... i więcej
jeśli nie musisz ponownie używać starej tablicy; btw wykonaj niezbędne operacje, zanim skonwertujesz ją na unikalną, jest to prawdopodobnie najszybszy sposób na zrobienie tego, również bardzo krótki.
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
to możesz spróbować
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]
Wymyśliłem tę funkcję, czytając ten artykuł ...
http://www.shamasis.net/2009/09/fast-alameterm-to-find-unique-items-in-javascript-array/
Nie lubię pętli for. ma wiele parametrów. lubię pętlę while--. podczas gdy jest najszybszą pętlą we wszystkich przeglądarkach oprócz tej, którą wszyscy bardzo lubimy ... chrome.
w każdym razie napisałem pierwszą funkcję, która używa while. Tak, jest to trochę szybsze niż funkcja znaleziona w artykule. ale za mało.unique2()
w następnym kroku użyj nowoczesnego js. Object.keys
drugą pętlę for zastąpiłem Object.keys js1.7 ... trochę szybciej i krócej (w chrome 2x szybciej);). Niewystarczająco!. unique3()
.
w tym momencie myślałem o tym, czego naprawdę potrzebuję w MOJEJ unikalnej funkcji. nie potrzebuję starej tablicy, chcę szybkiej funkcji. więc użyłem 2 pętli while + splot.unique4()
Nie trzeba dodawać, że byłem pod wrażeniem.
chrome: zwykłe 150 000 operacji na sekundę skoczyło do 1 800 000 operacji na sekundę.
tj. 80 000 operacji na sekundę w porównaniu do 35 000 000 operacji na sekundę
ios: 18 000 operacji na sekundę vs 170 000 operacji na sekundę
safari: 80 000 operacji na sekundę vs 6 000 000 operacji na sekundę
Dowód
http://jsperf.com/wgu lub lepiej użyj console.time ... microtime ... cokolwiek
unique5()
jest po prostu pokazanie, co się stanie, jeśli chcesz zachować starą tablicę.
Nie używaj, Array.prototype
jeśli nie wiesz, co robisz. właśnie zrobiłem dużo kopii i przeszłości. Użyj, Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
jeśli chcesz utworzyć natywny prototyp. Przykład : https://stackoverflow.com/a/20463021/2450730
Demo
http://jsfiddle.net/46S7g/
UWAGA: twoja stara tablica jest niszczona / staje się unikalna po tej operacji.
jeśli nie możesz odczytać powyższego kodu, zapytaj, przeczytaj książkę javascript lub oto wyjaśnienia dotyczące krótszego kodu. https://stackoverflow.com/a/21353032/2450730
niektórzy używają indexOf
... nie ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
dla pustych tablic
!array.length||toUnique(array);