1. 程式人生 > >JS能力測評12:查詢重複元素

JS能力測評12:查詢重複元素

思路:

將傳入的陣列arr中的每一個元素value當作另外一個新陣列b的key,然後遍歷arr去訪問b[value],若b[value]不存在,則將b[value]設定為1,若b[value]存在,則將其加1。可以想象,若arr中陣列沒有重複的元素,則b陣列中所有元素均為1;若arr陣列中存在重複的元素,則在第二次訪問該b[value]時,b[value]會加1,其值就為2了。最後遍歷b陣列,將其值大於1的元素的key存入另一個數組a中,就得到了arr中重複的元素。

function duplicates(arr) {
     //宣告兩個陣列,a陣列用來存放結果,b陣列用來存放arr中每個元素的個數
     var a = [],b = [];
     //遍歷arr,如果以arr中元素為下標的的b元素已存在,則該b元素加1,否則設定為1
     for(var i = 0; i < arr.length; i++){
         if(!b[arr[i]]){
             b[arr[i]] = 1;
             continue;
         }
         b[arr[i]]++;
     }
     //遍歷b陣列,將其中元素值大於1的元素下標存入a陣列中
     for(var i = 0; i < b.length; i++){
         if(b[i] > 1){
             a.push(i);
         }
     }
     return a;
 }

另一個方法: 

function duplicates(arr) {
    var a=arr.sort(),b=[];
    for(var i in a){
        if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); 
    }
    return b;
}//先排序,如果後一個與前一個相等且未儲存,則儲存。