1. 程式人生 > >一位數組去重的方法。

一位數組去重的方法。

spa div 得來 return 時間 func 判斷 是否 包含

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

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

這種也比較簡單,總得來說簡單的方法,就是循環遍歷一遍。然後借助其他方法完成。

一位數組去重的方法。