web前端面試系列 - 算法( 數組去重 )


1. 思路:設置一個臨時數組temp,然后遍歷要去重的數組arr,如果arr中的元素能夠在temp中找到,則跳過此元素,否則將此元素存入temp,最后返回temp。

實現一

1 function unique(arr){
2     var temp = [];
3     var len = arr.length;
4     for(var i = 0; i < len; i++){
5         if(temp.indexOf(arr[i]) === -1) temp.push(arr[i]);
6     }    
7     return temp;
8 }

實現二

 1 function unique( arr ) {
 2     var temp = [];
 3     var len = arr.length;
 4     for (var i = 0; i < len; i++) {
 5         var isRepeated = false;
 6         for ( var j = 0; j < temp.length; j++){
 7                 if ( arr[i] === temp[j] ){                    
isRepeated = true;
break;
}
9 } 10 if ( !isRepeated ) temp.push( arr[i] ); 11 } 12 return temp; 13 }

 

2. 思路:設置一個臨時數組temp,然后遍歷要去重的數組arr,如果arr[i]中的元素在arr中出現的第一次的位置也為i,則將其存入temp,否則跳過此元素,最后返回temp。

1 function unique(arr){
2     var temp = [];
3     var len = arr.length;
4     for (var i = 0; i <len; i++){
5         if(arr.indexOf([arr[i]) === i) temp.push(arr[i]);
6     }
7     return temp;
8 }

3. 思路:設置一個臨時對象tempObj,然后遍歷要去重的數組arr, 如果arr[i]中的元素在此對象中有標記,則跳過,否則在臨時對象中進行標記,並將其存入臨時數組tempArr, 最后返回tempArr。

 1 function unique(arr){
 2     var tempObj = {};
 3     var tempArr = [];
 4     var len = arr.length;
 5     for (var i = 0; i < len; i++) {
 6         if ( !tempObj[arr[i]] ){
 7             tempObj[arr[i]] = true;
 8             tempArr.push(arr[i]);
 9         }
10     }
11     return tempArr;
12 }

4. 思路:對要去重的數組 arr 先進行排序,這樣重復的元素就排在了相鄰的位置,然后對數組 arr 進行遍歷,將arr[i] 與 臨時數組 temp 中的最后一個元素進行比較,如果不同則將其存入臨時數組,如果相同則跳過此元素,最后返回臨時數組。

 1 function unique( arr ) {
 2     var temp = [];
 3     var len = arr.length;
 4     arr.sort();
 5     temp.push(arr[0]);
 6     for ( var i = 1; i < len; i++ ) {
 7         if ( arr[i] !== temp[temp.length-1] ) temp.push(arr[i]);
 8     }
 9     return temp;
10 }

 寫在最后:其實在真實的項目中,我們沒有必要自己去實現這樣的函數,利用underscore.js 或者lodash 這樣的函數庫提供的方法是更好的選擇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM