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;
}

浙公网安备 33010602011771号