2019.08.30数组去重的几种方法以及所需时间对比

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组去重方法</title>
</head>
<body>
<script>


function unique1(arr){
// 遍历数组arr
for(var i = 0, r = []; i < arr.length; i++){
// 遍历数组r
for(var j = 0; j < r.length; j++){
// 如果遍历到r中的元素等于arr中的当前元素退出循环
if(r[j] == arr[i]){
break;
}
}
// 如果遍历到最后没有发现有与arr当前元素相同的元素
if(j == r.length){
// 则把这个元素追加到末尾
r[r.length] = arr[i];
}
}
return r;
}


function unique2(arr){
// 遍历数组arr
for(var i = 0, hash = [], r = []; i < arr.length; i++){
// 如果哈希数组中不存在以arr[i]为下标的变量
if(hash[arr[i]] === undefined){
// 将这个值存入最终数组中
r[r.length] = arr[i];
// 并把该值作为下表存入哈希数组,给一个自定义的值
hash[arr[i]] = 1;
}
}
return r;
}


function unique3(arr){
// 与第二种方式的算法基本一致,因为对象的存储方式在底层就是数组
var obj = {};
// 遍历数组
for(var i = 0, r = []; i < arr.length; i++){
// 在obj中如果不存在以arr的当前值为属性名的属性
if(!obj[arr[i]]){
// 将这个值存入最终数组中
r.push(arr[i]);
// 并把该值作为下表存入哈希数组,给一个自定义的值
obj[arr[i]] = 1;
}
}
return r;
}


/*function unique4(arr){
// 给arr排序
arr.sort(function(a,b){return a-b})
// 遍历数组
for(var i = 1; i < arr.length; i++){
// 如果当前值等于了前面的那个值
if(arr[i] === arr[i-1]){
// 删除这个值
arr.splice(i,1);
// 因为删除了一个值,需要让循环向前移动一次
i--;
}
}
return arr;
}*/


/*function unique5(arr){
// 遍历数组
for(var i = 0; i < arr.length; i++){
// 遍历数组寻找与arr当前值相等的值
for(var j = i + 1; ; ){
// j记录找到的下标
j = arr.indexOf(arr[i], j);
// 如果j为-1了,代表后面没有相同的值了
if(j == -1){
break;
}
// 删除这个值
arr.splice(j, 1);
}
}
return arr;
}*/


function unique6(arr){
// ES6新语法
return new Set(arr);
}

var arr = [5,4,9,1,6,8,7,5,4,2,4,5,6,4,2,6,4,2,1,5,9]
// 测试
console.log(unique1(arr));
console.log(unique2(arr));
console.log(unique3(arr));
// console.log(unique4(arr));
// console.log(unique5(arr));
console.log(unique6(arr));
// 效率测试
for(var i = 0, arrtest = []; i < 10000; i++){
// 随机往数组里面添加10000个数据
arrtest[i] = Math.ceil(Math.random()*100)
}


console.time("unique1");
unique1(arrtest);
console.timeEnd("unique1");
console.time("unique2");
unique2(arrtest);
console.timeEnd("unique2");
console.time("unique3");
unique3(arrtest);
console.timeEnd("unique3");
/*console.time("unique4");
unique4(arrtest);
console.timeEnd("unique4");*/
/*console.time("unique5");
unique5(arrtest);
console.timeEnd("unique5");*/
console.time("unique6");
unique6(arrtest);
console.timeEnd("unique6");
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/awei313558147/p/11537194.html