仅性能!此代码可能比此处的所有代码快10倍 *在所有浏览器上均适用,并且对内存的影响最小。
如果您不需要重用旧数组,请先执行其他必要的操作,然后再将其转换为唯一数组,这可能是最快的方法,而且非常简短。
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--循环。除了我们都非常喜欢的浏览器外,Chrome浏览器是所有浏览器中最快的循环。
无论如何,我编写了第一个使用while的函数,是的,比本文中找到的函数要快一点,但还不够。unique2()
下一步使用现代js。Object.keys
我用js1.7的Object.keys替换了另一个for循环...更快,更短(在chrome中快2倍);)。不够!。unique3()
。
在这一点上,我正在考虑我真正需要的功能。我不需要旧的数组,我想要一个快速的函数。所以我用了2个while循环+拼接。unique4()
没用说我印象深刻。
chrome:通常每秒150,000次操作跃升至每秒1,800,000次操作。
即: 80,000 op / s与3,500,000 op / s
ios: 18,000 op / s和170,000 op / s
野生动物园: 80,000 op / s与6,000,000 op / s
证明
http://jsperf.com/wgu或更好地使用console.time ... microtime ...等等
unique5()
只是为了告诉您如果要保留旧数组会发生什么。
Array.prototype
如果您不知道您在做什么,请不要使用。我只是做了很多复制和过去。Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
如果要创建本机原型,请使用此示例。例如: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);