<script>
//数组去重复,有几种方法,哪种方法最好
//考虑数组中包含上万个元素的情况
//向一个数组中添加十万个元素, 元素取值 0-10000
var arr = [];
for(var i = 0; i < 10000; i++){
arr.push(Math.floor(Math.random() * 10000))
}
console.log(arr);
//第一种,利用对象属性名不能重复, 键值对, 很好用
function unique1(){
var obj = {};
for(var elem of arr){
obj[elem] = 1;
}
// console.log(obj);
var arr2 = []
for(var key in obj){
arr2.push(Number(key));
}
console.log(arr2);
}
console.time("unique1");//开始计时
unique1();
console.timeEnd("unique1");//计时结束
//第二种,利用新es标准中的新类型set 最简单,最时髦,相比对象更快
//set类型的对象: 是值不允许重复的集合
//向Set类型中加入新值
//利用解构打散set
function unique2(){
var set = new Set(arr);
console.log([...set]);
}
console.time("unique2");
unique2();
console.timeEnd("unique2");
//第三种,filter 数组过滤器 indexOf 最慢
function unique3(){
var arr2 = arr.filter((elem, i) => {
//查找当前元素的下标是不是自身下标
//indexOf会返回符合条件的第一个下标
return arr.indexOf(elem) == i;
})
console.log(arr2);
}
console.time("unique3");
unique3();
console.timeEnd("unique3"); //51ms
</script>