面試題——4種陣列去重的方法
陣列去重或者其衍生作為筆試題或者機試題出現的機率也是很大的,寫出的方法越多,則讓面試官覺得你思維越開闊,那麼成功的機率當然就大了。
廢話不多說,下面來說說下面我整理的4中陣列去重的方法
方法一: findInArr方法+select方法組合
findInArr : 查詢一個數在當前陣列中是否存在,存在返回true,找完所有沒有找到,返回false,這個數就是我們要操作的那個陣列
select :迴圈陣列,並呼叫findInArr方法 查詢當前arr[i]在arr2中是否存在,如果返回false 那麼就把當前這個數 arr[i] ,push到新的陣列 arr2中,最後return arr2
1 function findInArr(n ,arr){ 2 for (var i = 0; i < arr.length; i++) { 3 if (n == arr[i]) { 4 return true; 5 } 6 } 7 return false; 8 } 9 function select (arr){ 10 var arr2 = ; 11 for(var i = 0; i < arr.length; i++){ 12 if (!findInArr(arr[i],arr2)) { 13 arr2.push(arr[i]); 14 } 15 } 16 return arr2; 17 }
View Code
方法二 :利用json特性
建立一個空的json,通過對key的檢索,---> !json[arr[i]],取反說明不存在
這樣我們可以對其進行賦值,json[arr[i]] = true; 對於 賦什麼值,隨意,保證它的鍵值對就行
並且把當前這個數push 或者其他方式都行 ,總是新增到新陣列 arr2中,最後return arr2
1 function select (arr){ 2 var json = {}; 3 var arr2 = ; 4 for (var i = 0; i < arr.length; i++) { 5 if (!json[arr[i]]) { 6 json[arr[i]] = true; 7 arr2.push(arr[i]) 8 } 9 } 10 return arr2; 11 }
View Code
方法三: 相鄰數比較法,這個方法前提是先用sort 進行簡單排序,不需要改進版的
經過sort排序之後,我們不論它排序是否正確,但是有一點我們能確定,那就是相同的一定被排到了一起
那麼我們對排序之後的陣列遍歷,並且讓當前的數和下一個數進行比較,如果相等那麼用splice(i,1) 方法對其進行刪除,這時候i的值需要 i--,避免它少比一次,最後return arr;
1 function select(arr){ 2 arr.sort; 3 for (var i = 0; i < arr.length; i++) { 4 if (arr[i] == arr[i+1]) { 5 arr.splice(i,1) 6 i--; 7 } 8 } 9 return arr; 10 }
View Code
方法四:使用陣列的indexOf方法 (IE8--不相容)
通過判斷arr2.indexOf(arr[i]) == -1 ,來確定新陣列arr2中沒有arr[i],並將其新增到陣列arr2中,最終返回 arr2
1 function select (arr){ 2 var arr2 = ; 3 for( var i = 0; i < arr.length; i++){ 4 if (arr2.indexOf(arr[i]) == -1) { 5 arr2.push(arr[i]) 6 } 7 } 8 return arr2; 9 }
View Code
上述四中方法肯定存在的效能的差異,可以從速度上,所佔記憶體等進行比較,我沒有測過所以就不妄加定論。希望測過的朋友,能告知 。謝謝
本文為頭條號作者釋出,不代表今日頭條立場。