一、利用indexOf查找,ie9以下不兼容
function noRepeat(ary) { if (ary instanceof Array) { var newAry = []; for (var i = 0; i < ary.length; i++) { var cur = ary[i]; if (newAry.indexOf(cur) === -1) {//indexOf IE9以下不兼容 newAry.push(cur) } } return newAry; } }
二、利用对象属性名不能重复的方法。(不适合引号包裹的数字)
1.用了声明了一个新的数组和一个新的对象。
function noRepeat(ary){ if(ary instanceof Array){ var newAry = []; var obj ={}; // 不适合区分数组项是字符型的数字,例如:5与'5', for(var i = 0; i < ary.length; i++ ){ var cur = ary[i]; obj[cur] = cur; } //把对象的属性名放到新数组中 for(var key in obj){ newAry.push(obj[key]); } return newAry; } }
2.for in
function noRepeat(ary) { if (ary instanceof Array) { var obj = {}; for (var i = 0; i < ary.length; i++) { var cur = ary[i]; obj[cur] = cur;/ } //再用一个数组存储下 var ary2 = []; for (var key in obj) { ary2.push(obj[key]) } return ary2; } }
3.只声明一个对象方式,利用splice删除重复项
function noRepeat(ary){
if(ary instanceof Array){
var obj = {};
for(var i = 0; i < ary.length; ){
var cur = ary[i];
if(obj[cur] == cur){
ary.splice(i,1);
//删除重复项后,i值不变但数组塌陷自定取到后面的一项。i<ary.length是动态计算的不会出错。
}else{
obj[cur] = cur;
i++;
}
}
return ary;
}
}