两种常用的javascript数组去重方法
浏览量:3727
第一种是比较常规的方法
思路:
1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,用indexOf查找新数组中是否有该元素
3.若没有,则存到结果数组中
01 |
Array.prototype.unique1 = function(){ |
02 |
varres = []; |
03 |
for(vari = 0; i < this.length; i++){ |
04 |
if(res.indexOf(this[i]) == -1){ |
05 |
res.push(this[i]); |
06 |
} |
07 |
} |
08 |
returnres; |
09 |
} |
10 |
vararr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0] |
11 |
alert(arr.unique1()) |
此基础上可以略微优化,但原理不变,效果也不明显
01 |
Array.prototype.unique1 = function(){ |
02 |
varres = [this[0]];//直接将原数组中的第一个元素存入构建的新数组中 |
03 |
for(vari = 1; i < this.length; i++){//循环从第二个元素开始 |
04 |
if(res.indexOf(this[i]) == -1){ |
05 |
res.push(this[i]); |
06 |
} |
07 |
} |
08 |
returnres; |
09 |
} |
10 |
vararr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0] |
11 |
alert(arr.unique1()) |
第二种方法比上面的方法效率要高
思路:
1.先将原数组进行排序
2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中
01 |
Array.prototype.unique2 = function(){ |
02 |
this.sort(); //先排序 |
03 |
varres = [this[0]]; |
04 |
for(vari = 1; i < this.length; i++){ |
05 |
if(this[i] !== res[res.length - 1]){ |
06 |
res.push(this[i]); |
07 |
} |
08 |
} |
09 |
returnres; |
10 |
} |
11 |
vararr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0] |
12 |
alert(arr.unique2()) |