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