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);

 

转载于:https://www.cnblogs.com/sxshijingjing/p/6480315.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值