javascript判斷數組中元素的重復值個數


var arr = [23,23,12,21,45,35,21,23],
    i = 0, maxI,
    item = {};
arr.sort(function(x,y){return x - y;});
for(i = 0; maxI = arr.length, i < maxI; i +=1){
    var key = arr[i], obj = {};
    
    if(item[key]){
        item[key].count++;
    }else{
        obj.value = arr[i];
        obj.count = arr[i] == arr[i+1]? 2: 1;
        item[key] = obj;
    }
    if(arr[i] == arr[i+1]){
        arr.splice(i+1,1);
    }
    
}
JSON.stringify(item);//"{"12":{"value":12,"count":1},"21":{"value":21,"count":2},"23":{"value":23,"count":3},"35":{"value":35,"count":1},"45":{"value":45,"count":1}}"

 

數組arr為無序數組

  先對數組arr進行排序 Array.prototype.sort

  排序后的arr順序為從小到大,所以如果值是重復的,那一定是相鄰的

  for循環判斷(每次循環重新計算數組arr的長度)

    如果item[arr[i]]存在,則執行item[arr[i]].count++;

    如果item[arr[i]]不存在,將obj賦值;

      obj.value為arr[i];

      判斷相鄰是兩個元素值是否相等

        如果相等  obj.count設值為2  arr.splice(i+1,1);//從數組arr中刪除元素,元素索引位置為i+1,刪除個數為1;

        如果不相等  obj.count設值為1

      item[arr[i]]賦值為obj;

    

 1 var arr = [1, 2, 3, 4, 5, '1', '2', '4', '1', true, true, false, false, true, false, 0, 0, 1], maxRepeatItem;
 2         
 3        
 4 
 5         var hash = {};//利用hash 來記錄次數
 6         var m = 1; //現在的最大次數
 7         var trueEl = [];//最大的元素,可能出現不止一個最大元素,所以為數組
 8         for (var i = 0, len = arr.length; i < len; i++) {
 9             var el = arr[i];
10             var uniqueEl = typeof (el) + el; // 為了區分 1 和 '1'
11             if (!hash[uniqueEl]) {    //利用對象的hash檢驗是否元素重復
12                 hash[uniqueEl] = 1;
13             }else{
14                 hash[uniqueEl]++;
15             }       
16             if (hash[uniqueEl] == m ) {             
17                 trueEl.push(el);         //把當前最大次數的元素放到數組里
18             } else if (hash[uniqueEl] > m) {
19                 trueEl = [];           //清空數組
20                 m = hash[uniqueEl];
21                 trueEl.push(el);        
22             }          
23         }
24         console.log( trueEl);

 


免責聲明!

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



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