ТОЛЬКО ЭФФЕКТИВНОСТЬ! этот код, вероятно, в 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 - самый быстрый цикл во всех браузерах, кроме того, который нам всем так нравится ... chrome.
Во всяком случае, я написал первую функцию, которая использует while. И да, это немного быстрее, чем функция, найденная в статье. Но недостаточно.unique2()
Следующий шаг использовать современные JS. Object.keys
я заменил другой цикл for на js1.7 Object.keys ... немного быстрее и короче (в chrome в 2 раза быстрее);). Недостаточно!. unique3()
,
в этот момент я думал о том, что мне действительно нужно в МОЕЙ уникальной функции. мне не нужен старый массив, я хочу быструю функцию. так что я использовал 2 цикла + петли.unique4()
Бесполезно говорить, что я был впечатлен.
хром: обычные 150 000 операций в секунду подскочили до 1 800 000 операций в секунду.
то есть: 80 000 операций / с против 3 500 000 операций / с
IOS: 18 000 операций / с против 170 000 операций / с
сафари: 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);