ТІЛЬКІСТЬ! цей код, ймовірно, у 10 разів швидший, ніж усі коди тут * працює у всіх браузерах, а також має найменший вплив пам’яті .... і багато іншого
якщо вам не потрібно повторно використовувати старий масив; btw зробіть необхідні інші операції, перш ніж перетворити його на унікальний тут, мабуть, найшвидший спосіб зробити це, також дуже короткий.
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
то ви можете спробувати це
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]
Я придумав цю функцію, читаючи цю статтю ...
http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
Мені не подобається цикл for. він має багато параметрів. Я люблю цикл while--. в той час як це найшвидший цикл у всіх браузерах, крім того, який ми всі так любимо ... хром.
у будь-якому випадку я написав першу функцію, яка використовує while.Aep так це трохи швидше, ніж функція, знайдена в Article.але недостатньо.unique2()
Наступний крок - використання сучасних js. Object.keys
я замінив інший для циклу на Object.keys js1.7 ... трохи швидше і коротше (у хромі на 2 рази швидше);). Недостатньо!. unique3()
.
в цей момент я думав про те, що мені справді потрібно в моїй унікальній функції. мені не потрібен старий масив, я хочу швидку функцію. тому я використав 2, а петлі + зрощення.unique4()
Марно сказати, що я був вражений.
хром: звичайні 150 000 операцій в секунду підскочили до 1800 000 операцій в секунду.
тобто: 80 000 оп / с проти 3 500 000 оп / с
ios: 18 000 op / s проти 170 000 op / s
сафарі: 80 000 оп / с проти 6 000 000 оп / с
Доказ
http://jsperf.com/wgu або краще використовувати console.time ... microtime ... все, що завгодно
unique5()
це просто показати вам, що відбувається, якщо ви хочете зберегти старий масив.
Не використовуйте, Array.prototype
якщо ви не знаєте, чим займаєтесь. Я щойно зробив багато копій та минулий. Використовуйте, Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
якщо ви хочете створити власний prototype.example: https://stackoverflow.com/a/20463021/2450730
Демонстрація
http://jsfiddle.net/46S7g/
ПРИМІТКА: ваш старий масив після цієї операції знищується / стаєуніке.
якщо ви не можете прочитати код вище, запитайте, прочитайте книгу javascript або ось кілька пояснень щодо коротшого коду. https://stackoverflow.com/a/21353032/2450730
деякі використовують indexOf
... не ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
для порожніх масивів
!array.length||toUnique(array);