数组去重

作者: ferrint | 来源:发表于2017-02-27 21:30 被阅读3次

    关键词:数组去重

    方法

    声明一个数组
    * var arr = [1,3,"a",4,45,4,5,5,5,23,35,6,2,2,"a","b","b","c"];
    用原型写个方法

    
        Array.prototype.unique = function(){
         var res = [];
         var json = {};
         for(var i = 0; i < this.length; i++){
          if(!json[this[i]]){
           res.push(this[i]);
           json[this[i]] = 1;
          }
         }
         return res;
        }
        console.log(arr.unique());
    

    我们把上面的写法倒过来写一遍

       Array.prototype.unique = function(){
         var obj = {};
         var newArr = [];
         for(var i =this.length-1;i>=0;i--){
            obj[this[i]] = "";   // 利用对象属性的唯一性 
         }
         //  console.log(obj);
         for(var item in obj){
            newArr.push(item)
          }
          return newArr.reverse();
         }
    
         console.log(arr.unique());
    

    把上面的方法简化一下

        Array.prototype.unique = function(){
         var obj = {};
         var newArr = [];
        for(var i =this.length-1;i>=0;i--){
            if(obj[this[i]] == undefined || obj[this[i] != this[i]]){
            obj[this[i]] = "";   // 利用对象属性的唯一性 
            newArr.push(this[i]);
            }
         }
          return newArr.reverse();
         }
         console.log(arr.unique());
    

    下面我们来看看毁天灭地的正则表达式怎么写

       // 正则表达式
       Array.prototype.unique = function(){
        return this.join(',').match(/([^,]+)(?!.\1)/ig);
       }
       console.log(arr.unique());  
    

    简直残暴!!!
    在这里附上一个 在线正则测试工具


    其他常用方法
    想想还是附上吧

    Array.prototype.unique = function(){
     var res = [this[0]];
     for(var i = 1; i < this.length; i++){
      var repeat = false;
      for(var j = 0; j < res.length; j++){
       if(this[i] == res[j]){
        repeat = true;
        break;
       }
      }
      if(!repeat){
       res.push(this[i]);
      }
     }
     return res;
    }
    var arr = [1, 'a', 'a', 'b', 'c', d', 'e', 1, 0]
    alert(arr.unique());
    

    利用了两个for循环,这种写法效率低,下一种写法效率要高一些

    Array.prototype.unique = function(){
     this.sort(); //先排序
     var res = [this[0]];
     for(var i = 1; i < this.length; i++){
      if(this[i] !== res[res.length - 1]){
       res.push(this[i]);
      }
     }
     return res;
    }
    var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
    alert(arr.unique());
    

    正式结束!

    相关文章

      网友评论

        本文标题:数组去重

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