找出數組 arr 中重複出現過的元素

function duplicates(arr) {
    var newarr = [];
    for(var j = 0;j < arr.length;j++){
        for(var i = j+1;i < arr.length;i++){
            if(arr[j] == arr[i]){
                newarr.push(arr[i]);
                
            }
        }
    } 
    //return [...new Set(newarr)];
    return Array.from(new Set(newarr));
}

輸入:
[1, 2, 4, 4, 3, 3, 1, 5, 3]
輸出
[1, 3, 4]數組

方法二:code

function duplicates(arr) {
    //獲得重複出現過的元素組成的數組   
    var newarr = [];
    for(var j = 0;j < arr.length;j++){
        if(arr.indexOf(arr[j]) != j){
            newarr.push(arr[j]);
        }
    } 
    //數組去重
    var temp = []; //一個新的臨時數組
    for(var i = 0; i < newarr.length; i++){
        if(temp.indexOf(newarr[i]) == -1){
            temp.push(newarr[i]);
        }
    }
    return temp;
}

方法三對象

https://www.nowcoder.com/questionTerminal/871a468deecf453589ea261835d6b78b
若是元素過大的話,方法三很差,由於會遍歷不少次。並且若是原數組中的每一項不全是數值,獲得關聯數組,那麼對數組b的遍歷要作修改
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 obj = {};
    var repeatList = [];
    //遍歷數組,將數組的值做爲obj的索引,出現次數爲值
    arr.forEach(function(item){
        if(obj[item]){
            obj[item] +=1;
        }else{
            obj[item] = 1;
        }
    });
    //獲取對象自身屬性
    var propertyNames = Object.getOwnPropertyNames(obj);
    //遍歷對象,將重複出現的元素取出
    propertyNames.forEach(function(item){
        if(obj[item] > 1){
            repeatList.push(parseInt(item));
        }
    });
    return repeatList;  
}

方法五:索引

function duplicates(arr) {
 var result = [];
    arr.forEach(function(elem){
       if(arr.indexOf(elem) !=arr.lastIndexOf(elem) && result.indexOf(elem) == -1){
           result.push(elem);
       }
    });
    return result;
}

方法六get

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;
}//先排序,若是後一個與前一個相等且未保存,則保存。
相關文章
相關標籤/搜索