-
双重循环
<script>
var arr = [1,5,3,1,9,8,5,4,2,3]; // 需要去重的数组
var list = []; // 用来存结果数组
for(var i=0;i<arr.length;i++){
var num = arr[i];
if(list.indexOf(num)<0){
list.push(num);
}
}
</script>
但是indexOf其实也是循环,这样无形中浪费时间和金钱。这个数组还小,如果arr.length=60000甚至更高的时候简直可怕,循环次数是两个数组长度的乘积。所以我想到了hash
去重法。
-
hash去重
function dropRepeat(){
var arr = [1,5,3,1,9,8,5,4,2,3];
var hash = [];
for(var i=0;i<arr.length;i++){
console.log(!hash[arr[i]]);
if(!hash[arr[i]]){
hash[arr[i]] = true;
}
}
// 仅获取 `hash` 中的 `keys`
var i=0;
var keys=[];
for(keys[i++] in hash);
return keys;
console.dir(keys);
}
这次循环次数只有不到长度*2次,还是有优化的。
-
正则去重
function unique3(arr){
var reg=/(^|,)([^,]+)(,\2)*/g;
return String(arr.sort())
.replace(reg,"$1$2")
.split(",");
}