第一种:
为数组原型添加新的方法:
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());
函数里声明一个空数组,循环调用数组,空数组里如果不能找到循环数组的数据,则向这个空数组里面添加该数据,最后返回这个数组。
但是indexOf这个方法ie8以下支持不好,所以我们还可以这么写:
Array.prototype.unique1
= function(){
var res
= [];
for(var
i =
0; i < this.length;
i++){
var repeat
= false;//false
for(var
j =
0; j <
res.length;
j++){
if(this[i] ==
res[j]){
repeat = true;
break;
}
}
if(repeat==false){
res.push(this[i]);
}
}
return res;
};
var arr
= [1, 'a',
'a', 'b',
'd', 'e',
'e',
1, 0];
console.log(arr.unique1());
声明一个空数组,repeat一个false,然后拿arr中的每项和res中的每项对比,如果一样则返回ture,不一样则执行if那个操作,添加这个值到新数组中。
第二种:
利用排序的方法,比第一种更简洁些。
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个和空数组的最后一位做比较,如果不相等则添加到空数组中。最后返回这个数组,这么做的缺点是最后的返回值也是排序后的,如果需要和原数组同样位置的数据则不适用。
第三种:
用数组和对象做对比。
Array.prototype.unique3
= function(){
var res
= [];
var json
= {};
for(var
i =
0; i < this.length;
i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] =
1;
console.log(json);
}
}
return res;
};
var arr
= [112,112,34,'你好',112,112,34,'你好','str','str1'];
console.log(arr.unique3());
建立一个空数组和空对象,循环这个数组,到对象中匹配数组中的元素,如果不存在,则在空数组中添加这个元素,在空对象中添加这个key并随便给个值。
更多请关注:FE学习笔记
2465

被折叠的 条评论
为什么被折叠?



