1. 程式人生 > >面試題——4種陣列去重的方法

面試題——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

上述四中方法肯定存在的效能的差異,可以從速度上,所佔記憶體等進行比較,我沒有測過所以就不妄加定論。希望測過的朋友,能告知 。謝謝

本文為頭條號作者釋出,不代表今日頭條立場。