前端面試高頻題:刪除數組重複元素的多種方法

最近在想着換工做,去了一家中關村的上市公司,面試官隨便問了幾個問題其中就提到了怎麼刪除數組元素的方法,表示這已是第三次遇到了這個問題了,因爲知識口頭說說因此就隨便說了下,以前用的時候都是直接找的方法庫雖然知道大體是怎麼寫的可是尚未真正寫過,網上的方法仍是蠻多的這裏也給你們分享一個做者寫的吧,但願對初學者有所幫助:javascript

//數組去重的方法
Array.prototype.unique=function(){
    //集中聲明變量
    var 
      oldArr=this,
      newArr=[oldArr[0]],
      len=oldArr.length,
      i=1;
      
    //過濾空數組
    if(!len) return this;
    
    //過濾重複元素
    for(;i<len;i++){
       newArr.indexOf(oldArr[i])<0 ? newArr.push(_this) : '';  
    }
    //返回過濾後的數組沒有影響原數組
    return newArr;
}
var arr=['a','a','b','a','c','d'];
console.log(arr.unique());//["a", "b", "c", "d", unique: function]

 

 

雖然網上也有不少並且本身寫的也不咋地,可是畢竟本身寫的邏輯清楚之後還能夠順着邏輯擴展好比擴展到對象元素去重或者是能夠同時操做多個數組等等這裏再放上別人的寫的幾個方法能夠綜合比較下html

方法1:
function oSort(arr)
        {
            var result ={};
            var newArr=[];
            for(var i=0;i
            {
                if(!result[arr[i]])

                {

                    newArr.push(arr[i])

                    result[arr[i]]=1

                }

            }

            return newArr

        }

原文出處:http://blog.sina.com.cn/s/blog_77a4568a0101d4lq.htmljava

方法2:
遍歷要刪除的數組arr, 把元素分別放入另外一個數組tmp中,在判斷該元素在arr中不存在才容許放入tmp中
用到兩個函數:for ...in 和 indexOf()
 
 
         var student = ['qiang','ming','tao','li','liang','you','qiang','tao'];
         function unique(arr){
              // 遍歷arr,把元素分別放入tmp數組(不存在才放)
              var tmp = new Array();
              for(var i in arr){
                  //該元素在tmp內部不存在才容許追加
                  if(tmp.indexOf(arr[i])==-1){
                   }
          }
           return tmp;
      }
 
 
方法3:
把目標數組arr的元素值和鍵的位置調換 自動就把重複的元素給刪除掉了,調換後的樣子:array('qiang'=>1,'ming'=>1,'tao'=>1)
<script type="text/javascript">
   var student = ['qiang','ming','tao','li','liang','you','qiang','tao'];
   function unique(arr){
        var tmp = new Array();
        for(var m in arr){
            tmp[arr[m]]=1;
        }
        //再把鍵和值的位置再次調換
        var tmparr = new Array();
       for(var n in tmp){
         tmparr.push(n);
       }
     return tmparr;
  }
</script>

方法4面試

 

/**
  * 去除數組重複元素
  */
 function uniqueArray(data){  
   data = data || [];  
   var a = {};  
   for (var i=0; i<data.length; i++) {  
       var v = data[i];  
       if (typeof(a[v]) == 'undefined'){  
            a[v] = 1;  
       }  
   };  
   data.length=0;  
   for (var i in a){  
        data[data.length] = i;  
   }  
   return data;  
}  

 

 

 

方法都差很少第三個方法想法仍是蠻高明的~數組

相關文章
相關標籤/搜索