第一种:
为数组原型添加新的方法:
Array.prototype.unique = function() {
var newArr = [];
for(var i = 0;i<this.length;i++) {
if(newArr.indexOf(this[i]) == -1) {
newArr.push(this[i]);
}
}
return newArr;
};
var arr = [1,3,1,2];
console.log(arr.unique());
第二种:
利用排序的方法,比第一种更简洁些。
Array.prototype.unique2 = function(){
this.sort(); //先排序
var res = [];
for(var i = 0; i < this.length; i++){
if(this[i] !== res[res.length - 1]){
res.push(this[i]);
}
}
return res;
};
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0];
console.log(arr.unique2());
首先排序,排序后重复的数据会在相邻位置,用arr的第i个和空数组的最后一位做比较,如果不相等则添加到空数组中。最后返回这个数组,这么做的缺点是最后的返回值也是排序后的,如果需要和原数组同样位置的数据则不适用。