<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>