zoukankan      html  css  js  c++  java
  • 一位数组去重的方法。

    首先数组去重有很多方法,这里看见几个特别好的。

    var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];  
       function unArray (Arr) {            
           var newArr = [];        
           for (var i = 0; i < Arr.length; i++) {            
               if (newArr.indexOf(Arr[i]) == -1){//检测newArr数组里是否包含Arr数组的内容,==-1检索的字符串没有出现则为-1       
                    newArr.push(Arr[i])//把Arr数组的第i项插入新数组           
                }          
            };            
           return newArr;        
         }    
     unArray(Arr);
    
    作者:臭臭臭魁
    链接:https://www.jianshu.com/p/a042f4dc0d75
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    第一个方法,用了indexof的特性,判断数组中是否有此元素。最开始数组是空的,然后添加进去元素,当第二次遇到元素判断数组里面有没有,没有的话才添加进去。

    var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
    function unArray (Arr) {  
      var newArr = [Arr[0]]; 
       for (var i = 0; i < Arr.length; i++) {   
           if (Arr.indexOf(Arr[i]) == i){//检测Arr数组第一次出现的位置是i        
              newArr.push(Arr[i])//把Arr数组的第i项插入新数组newArr 
            }   
       };   
       return newArr;//返回新数组newArr
      }
    unArray(Arr);
    //console.log(unArray(Arr));
    
    作者:臭臭臭魁
    链接:https://www.jianshu.com/p/a042f4dc0d75
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    第二种方法,indexof是判断他首次出现的index。i是自然增长的,如果不出现重复的字符那么每一次都能推一个元素到新数组中。一个字符对应一个他首次出现的位置,i是变得传进去的东西也在变。当第二次传相同的字符进去,和i不同所以就不行了。

    var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
    function unArray (Arr) {  
      var newArr = [],hash = {};//hash位hash表 
       for (var i = 0; i < Arr.length; i++) {      
          if (!hash[Arr[i]]){//如果hash表里没有第i项则         
             hash[Arr[i]] = true;//把第i项插入到hash表里       
             newArr.push(Arr[i])//把Arr数组的第i项插入新数组。此方法的时间消耗长,内存消耗大;    
          }   
       };    
        return newArr;
    }
    unArray(Arr);
    
    作者:臭臭臭魁
    链接:https://www.jianshu.com/p/a042f4dc0d75
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    这是种哈希算法,看不懂,就这样吧。

    Array.prototype.distinct = function(){
     var arr = this,
      result = [],
      i,
      j,
      len = arr.length;
     for(i = 0; i < len; i++){
      for(j = i + 1; j < len; j++){
       if(arr[i] === arr[j]){
        j = ++i;
       }
      }
      result.push(arr[i]);
     }
     return result;
    }
    var arra = [1,2,3,4,4,1,1,2,1,1,1];
    arra.distinct();    //返回[3,4,2,1]

    这是双循环去重,

    var arr = [1,2,3,3,4,5,5];
    var set = new Set(arr);
    var newArr = Array.from(set);

    这是es6去重,有点简单粗暴。

    function unique3(arr){
     var res = [];
     var obj = {};
     for(var i=0; i<arr.length; i++){
      if( !obj[arr[i]] ){
       obj[arr[i]] = 1;
       res.push(arr[i]);
      }
     } 
     return res;
    }

    这种也比较简单,总得来说简单的方法,就是循环遍历一遍。然后借助其他方法完成。

  • 相关阅读:
    Ubuntu 12.10 安装破解sublimetext 2
    封装一个类型转换的方法
    【转】CultureInfo中重要的InvariantCulture
    C# 36进制转10进制
    用泛型的IEqualityComparer<T>接口去重复项
    关于wamp启动是80端口被占用的问题详解(win7系统下WAMP 80端口被MicrosoftHTTPAPI/2.0占用的解决办法)
    Ubuntu 更改鼠标滚轮速度
    edge ctrl+c 复制不起作用
    centos 7 mysql8 安装和卸载
    Windows Terminal 终端 SSH连接centos7 linux
  • 原文地址:https://www.cnblogs.com/manu-yyj/p/9275644.html
Copyright © 2011-2022 走看看