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