美文网首页
数组去重的几种简单方法

数组去重的几种简单方法

作者: 于哈哈yhh | 来源:发表于2019-05-30 18:11 被阅读0次

    1.最简单的就是ES6的实现
    function unique(arr){ return [...new Set(arr)]; }
    或者是
    function unique(arr){ return Array.from(new Set(arr)); }

    2.就是我之前最常用的,思想就是先新建一个数组temp,遍历一下,判断这个新数组中有没有当前这个值,没有就push进去,最简单数组去重法

    function unique(array){
      var temp = []; //一个新的临时数组
      for(var i = 0; i < array.length; i++){
          if(temp.indexOf(array[i]) == -1){
              temp.push(array[i]);
          }
      }
      return temp;
    }
    

    3.第三中的想法和第二种差不多,是通过遍历来判断当前这个值是不是在原数组里第一次出现,也就是说通过判断这个元素的位置是不是等于当前的下标,是那就是第一次出现啦,很简单。

    function unique(array){
      var temp = []; //一个新的临时数组
      for(var i = 0; i < array.length; i++){
          if(array.indexOf(array[i]) === i){
              temp.push(array[i]);
          }
      }
      return temp;
    }
    

    4.第四种就是根据第三中的想法引申出来了的,是通过filter函数来实现

    function unique(array){
      return array.filter( (element, index, self) => {
        return self.indexOf( element ) === index;
      });
    }
    

    5.对象键值法去重(这是我找的网上的,感觉挺好,虽然麻烦些)

    /* * 速度最快, 占空间最多(空间换时间)
    *
    * 该方法执行的速度比其他任何方法都快, 就是占用的内存大一些。
    * 现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,
    * 不是的话给对象新增该键并放入新数组。
    * 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”,
    * 不同的键可能会被误认为一样,例如n[val]-- n[1]、n["1"];
    * 解决上述问题还是得调用“indexOf”。*/
    function unique(array){ 
      var temp = {}, r = [], len = array.length, val, type; 
      for (var i = 0; i < len; i++) {
            val = array[i];
            type = typeof val; if (!temp[val]) {
                temp[val] = [type];
                r.push(val);
            } else if (temp[val].indexOf(type) < 0) {
                temp[val].push(type);
                r.push(val);
            }
        } 
      return r;
    } 
    

    暂时先这样,有好的我再继续更新,哈哈

    这里还有一个更全的链接,请移步这里:他山之石

    相关文章

      网友评论

          本文标题:数组去重的几种简单方法

          本文链接:https://www.haomeiwen.com/subject/tzavtctx.html