數組去重簡單的幾類方法和typeof的封裝

在平時做案例等時經常會遇到數組去重的問題,之前一直都是選擇不理睬的態度,不過這樣‘錯誤的選擇’並沒有持續多久,某天還是把它弄懂了,哈哈哈,開心。據聽說數組去重在面試中也會問道,所以趕緊拿個小本本記下

數組去重有好多方法,目前我只學到了2種,不過,這兩種方法可是非常實用的,當然也非常理解,牢記。

1.利用對象的屬性不會重複的原理進行去重

 把數組裏的每一位放在對象裏面,當做它的屬性名,挨個訪問這對象的屬性名看有沒有這個屬性值

例:var arr =[1,1,1,2,2,2,2,2,3,3,5,6,7];

       var temp = {};

       遍歷一遍數組arr,arr[0] =1,arr[1]=1,arr[2]=1,相繼的與temp對象屬性值做對比,temp[0]=undefined,就將arr數組的第一個值當作temp的“鍵”,並隨意給他寫個“值”,等到第二次遇到arr[1],temp已經有個相應的屬性了,就直接忽視了,這樣就達到去重的效果。代碼如下

 

var arr =[1,1,1,2,2,2,2,2,3,3,5,6,7];
      Array.prototype.unique  = function(){
      	var temp = {},
      	    arr = [],
      	    len = this.length;
      	    for(var i = 0;i<len;i++){
      	    	// 拿出當前對象的當前的數組位
      	    	if(!temp[this[i]]){
      	    		temp[this[i]] = 'abc';//一定要給temp對象賦值(值隨便)
      	    		arr.push(this[i]);
      	    	}
      	    }
      	 return arr;
}
//輸出結果
arr.unique();
(6) [1, 2, 3, 5, 6, 7]

2.採用ES6中的set方法

在es6中,set就是一構造函數,類似於數組,它是不允許內部出現相同的元素的。利用這一屬性達到去重目的。

      const set=new Set([1,1,3,'3',7,9,4,8]);//此時set爲set型數組,並非正常數組

       console.log([...set]);//神奇三點將set型數組轉換爲正常數組
       console.log(Array.from(set));
       //打印結果爲:
       [1, 3, "3", 7, 9, 4, 8]
       [1, 3, "3", 7, 9, 4, 8]

好了,去重就說到這,下面加一個小插曲,一個typeof的封裝,嘿嘿嘿嘿嘿

typeof的封裝

<script>

           function type(target){
           	var ret = typeof(target);
               var template = {
                   	       '[object Object]':'object-Object',
                   	       '[object Array]':'array-Object',
                   	       '[object Number]':'number-Object',
                   	       '[object Boolean]':'boolean-Object',
                   	       '[object String]':'string-Object'
                   }
                   if(target===null)  {
                   	return null;
                   }else if(ret == 'object'){
                   	var str = Object.prototype.toString.call(target);
                   	return template[str];
                   }else{
                   	return ret;
                   }
           }
</script>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章