数组去重是许多公司招聘前端职位的必考内容,把自己学习到的一些方法总结一下做一个巩固和复习。
1.第一种方法
function sift(array){
array.sort();
for (var i=0;i<array.length;i++) {
if(array[i]==array[i+1]){
array.splice(i,1)
i--;
}
}
return array;
}
通过sort方法对数组进行排序,把相同的项放到相邻的位置,循环排序后的数组,判断如果当前项与后一项相等,则在数组中删除当前项,当前循环值减一后继续循环。最后返回删除后的数组。
2.第二种方法
function sift(array){
var leng,newarray;
leng= array.length;
newarray=[];
for(var i=0;i<leng;i++){
for(var j=i+1;j<leng;j++){
if(array[i]==array[j]){
i++;
}
}
newarray.push(array[i]);
}
return newarray;
}
通过循环数组把当前项和后面的每一项做比较,如果相等则跳过。最后返回比较完后的新数组。
3.第三种方法
function sift(array){
var obj,newarray;
obj={};
newarray=[];
for(var i=0;i<array.length;i++){
if(!obj[array[i]]){
obj[array[i]]=true;
newarray.push(array[i]);
}
}
return newarray;
}
创建一个空对象,循环测试数组,如果对象里面没有当前数组项的属性则把当前数组项添加新的数组里面,最后返回新数组。此方只循环了一次数组,因此执行速度比较快,但却多创建了一个对象,因此内存占用相对较大。典型的空间换时间。
4.第四种方法
function sift(array){
var leng,newarray;
leng = array.length;
newarray=[];
for(var i=0;i<leng;i++){
if(newarray.indexOf(array[i])==-1){
newarray.push(array[i]);
}
}
return newarray;
}
创建一个新数组,循环测试数组,通过indexOf()方法判断当前项在新数组中是否出现过,没有则添加当前项到新数组中,最后返回新数组。