关于javascript数组去重的性能测试

本文继上一篇文章《Javascript数组去重 方法总结》所写,本文主要讲一下上篇文章所写的数组去重方法的性能问题,主要讨论一下那种方法性能最优。

关于javascript的数组去重方法,某人刚才也提供了一种方法,经测试性能上有不少优势,特贴代码如下:

// --- someone  renenglish--- 
function someone_uniq(a,strict){
	var o = {},
		arr = [],
		key;
	for(var i = 0; i < a.length; ++i){
		key = a[i];
		if(strict){
			if(typeof(a[i]) == 'number'){
				key = a[i]+'.number';
			}   
			if(typeof(a[i]) == 'string'){
				key = a[i]+'.string';
			}
		}   
		if(!o[key]){
			o[key] = true;
			arr.push(a[i]);
		}   
	}   
	return arr;
};

该方法,与怪飞的方法,性能上几乎不相上下,但经多次测试发现,及大数组的测试下也能看出该方法比之怪飞的方法还是稍微差了那么一点点,不过比我第一次写的要快30倍左右。

下面s是jQuery中的数组去重方法:jQuery.unique(),我做了一下简单的改写,以方便在此处直接使用,代码如下所示:

//jQuery中的数组去重方法,不太适于测试,性能啊性能,难道真的这么差吗?
function jquery_unique(arg){
	var arg = arg.sort();
	for ( var i = 1, j = arg.length; i < j; i++ ) {
		if ( arg[i] === arg[ i - 1 ] ) {
			arg.splice( i--, 1 );
		}
	}
	return arg;
}

该方法的思路:
对数组排序,判断相邻的值是否相等
如果相等,则用splice()删除相等的元素
恩,不过该方法的性能实在不敢恭维,我在FF下处理一个长度1000的数组,浏览器就直接死掉,而之前写的方法,均可以处理长度100000的数组,这…

最后是QWrap框架中的快速去重法,因代码有点长,不在此处贴代码了,可直接到测试页面中测试其性能。

最后,附上一个比较直观的性能测试页面:
http://static.crossyou.cn/study/js-array-no-repeart-tester.html

这篇文章目前有2条评论

Leave a Reply

(必填项)

(必填项)

(可选)