码迷,mamicode.com
首页 > 编程语言 > 详细

一位数组去重的方法。

时间:2018-07-06 22:29:27      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:span   .com   func   循环   方法   重复   prot   获得   OLE   

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

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

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

一位数组去重的方法。

标签:span   .com   func   循环   方法   重复   prot   获得   OLE   

原文地址:https://www.cnblogs.com/manu-yyj/p/9275644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!