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 這樣的函數庫提供的方法是更好的選擇。