javascript数组去重算法
先写出这个问题的所有方法,然后讨论性能问题:
方法1:
js数组去重就是把数组中重复的元素去掉:
Array.prototype.delRepeat=function(){
var newArray=new Array();
var len=this.length;
for (var i=0;i<len ;i++){
alert("i:"+i);
for(var j=i+1;j<len;j++){
if(this[i]===this[j]){
j=++i;
}
alert("j:"+j);
}
newArray.push(this[i]);
}
return newArray;
}
arr =[1,1,2,1,3,4,4];
alert(arr.delRepeat());//2,1,3,4
我们分析一下上面代码的执行过程
i=0 j=1,2,2,3,4,5,6
i=3 j=4,5,6
i=4 j=5,6
i=5 j=6
结果:2,1,3,4
方法2:
$(function(){ Array.prototype.unique = function() { this.sort(); //alert(this); var re=[this[0]]; //alert(re); for(var i = 1; i < this.length; i++) { //arr =[1,1,1,2,2,1,3,4,4]; if( this[i] !== re[re.length-1]) { re.push(this[i]); alert(re); } } return re; } arr =[8,1,1,1,2,2,1,3,4,4]; alert(arr.unique()); });
这个方法的思路是先把数组排序,然后比较相邻的两个值。 排序的时候用的JS原生的sort方法,JS引擎内部应该是用的快速排序吧。 最终测试的结果是此方法运行时间平均是第二种方法的三倍左右,不过比第一种和第三种方法快了不少。
方法3:
Array.prototype.unique = function(){ //定义一个零时数组 var n = []; for(var i = 0;i<this.length;i++){ //如果当前数组的第i已经保存进了临时数组,那么跳过, //否则把当前项push到临时数组里面 if(n.indexOf(this[i]) == -1){ n.push(this[i]); } } return n; }