方案一:
遍历数组中的每一项,拿每一项和它后面的项依次比较,如果相同了,则把相同的这一项在原来数组中删除
var ary=[1,1,2,2,3,3,4,2,2,2,2,2,3,3,3,4,4,4,1,1];
for(var i=0;i<ary.length-1;i++){
var cur=ary[i];
for (var j=i+1;j<ary.length;j++){
if(cur==ary[j]){
ary.splice(j,1)
j--;
}
}
}
方案二:
利用indexOf来验证当前数组中是否包含某一项,包含把当前项删除掉(不兼容IE6~8)
var ary=[5,5,3,1,1,2,2,3,3,4,2,2,2,2,2,3,3,3,4,4,4,];
for(var i=0;i<ary.length;i++){
var cur=ary[i];
var next=ary.slice(i+1);
if(next.indexOf(cur)>-1){
ary.splice(i,1);
i--;
}
}
console.log(ary.sort(function(a,b){
return a-b;
}))
方案三:
遍历数组中的每一项,把每一项作为新对象的属性名和属性值存储起来,例如:当前项1,对象中存储{1:1}
在每一次向对象中存储之前,首先看一下原有对象中是否包含了这个属性(typeof obj[xxx]==='undefined'说明当前对象中没有xxx这个属性
),如果已经存在这个属性说明数组中的当前项是重复的(1-在原有数组中删除这一项 2-不再像对象中存储这个结果),如果不存在,把当前项作为对象的属性名和属性值存储进去
var ary=[5,5,3,1,1,2,2,3,3,4,2,2,2,2,2,3,3,3,4,4,4,];
var obj={};
for(var i=0;i<ary.length;i++){
var cur=ary[i];
if(typeof obj[cur]!=='undefined'){
ary[i]=ary[ary.length-1];//用splice删除当前项,会让后面所有项向前挪一位(用最后一项代替重复项,后面所有项不受影响)
ary.length--;//删除数组最后一项
i--;
continue;
}
obj[cur]=cur;
}
方案四:
相邻比较法,首先给数组进行排序,然后相邻两项比较,相同的话把后一项在数组中去掉
var ary=[5,5,3,1,1,2,2,3,3,4,2,2,2,2,2,3,3,3,4,4,4,];
ary.sort(function(a,b){
return a-b;
})
var aryCur=[ary[0]];
for(var i=1;i<ary.length;i++){
if(ary[i]!==aryCur[aryCur.length-1]){
aryCur.push(ary[i])
}
}