一位數組去重的方法。

首先數組去重有不少方法,這裏看見幾個特別好的。es6

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
來源:簡書
簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

這是種哈希算法,看不懂,就這樣吧。this

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]

這是雙循環去重,spa

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

這是es6去重,有點簡單粗暴。prototype

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

這種也比較簡單,總得來講簡單的方法,就是循環遍歷一遍。而後藉助其餘方法完成。code

相關文章
相關標籤/搜索