美文网首页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