美文网首页FE程序员
js数组去重的几种方法。

js数组去重的几种方法。

作者: 臭臭臭魁 | 来源:发表于2016-01-05 14:39 被阅读1854次

    在项目中偶尔会用到数组,通过原生js去除数组的重复项。简单的记下几种方法,亲测可用。。

    第一种方法:

    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);
      //console.log(unArray(Arr));
    

    第一种方法是检测新数组newArr里有没有包含Arr里的i项,如果没有则向newArr里添加Aii[i]项,如果有则跳过;不做任何操作。

    第二种方法:

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

    第二种方法是在Arr数组里检测,Arr.indexOf(Arr[i])返回某一项在Arr数组里第一次出现的位置,如果第一次出现就push到newArr数组去,如果第二次出现,则什么都不操作。

    第三种方法:

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

    //console.log(unArray(Arr));
    第三种是关于hash表的,不太熟悉hash表,所以用到的很少啊。。

    第四种方法

    var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
     function unArray (Arr) {
      Arr.sort();//先排序
      var newArr = [Arr[0]],firstArr = Arr[0];//创建一个新数组和一个变量firstArr,并赋值为数组Arr的第一个值
        for (var i = 0; i < Arr.length; i++) {
           if (Arr[i] !== firstArr){//如果数组的第i个不等于firstArr;
               newArr.push(Arr[i]);//把第Arr[i]项插入新数组newArr  
               firstArr = Arr[i];//重新设置变量firstArr为rr[i],也就是刚插入newArr的那一项
          }
        };
        return newArr;//返回新数组newArr
      }
     unArray(Arr);
    // console.log(unArray(Arr));
    

    此方法还的谢谢二楼。

    目前只会这几种方法啊,等以后学到更多的再补充,高手看到不足的地方,欢迎评论。。

    相关文章

      网友评论

      • 47f80bfa235d:本菜鸟弱弱地问下。indexOf不是字符串的方法吗?为什么数组可以用.......
        47f80bfa235d: @臭臭臭魁 没事
        臭臭臭魁:@十年以后听你唱十年 https://msdn.microsoft.com/zh-cn/library/bb383831.aspx 参考这个。不好意思,这么就才回你
      • LostAbaddon:还有一种方法是这样的:
        首先,给数组排序。
        然后,记录第一个元素为到变量last。
        接着,进入循环:如果当前元素等于last,那么continue;如果不等于last,push到newArr,并将当前元素设置为last。

        正文的三个方法都基于搜索,这个方法基于排序。
        从时间上来说,第二个方法不如第一个方法,因为第一个方法在newArr中搜索,而newArr肯定比Arr小,所以搜索更快,用时更少;第三个方法应该和第一个方法差不多。
        而这个排序的方法一开始要排序一下,如果数组本身已经足够有序的话,应该比上面的方法都快——虽然平均说来应该和之前的方法是差不多的用时。
        臭臭臭魁:@塔塔酱 :smile:
        LostAbaddon:@臭臭臭魁 都有这个逻辑过程了,代码写写很快的啊。
        臭臭臭魁:@塔塔酱 高手,谢谢,请留下你的代码 :smile:

      本文标题:js数组去重的几种方法。

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