检测数组中出现最多次数的元素及次数

收集大佬们的写法
  • 有个Bug,如果刚好有两个或者两个以上的最多次数,这个只能找到第一次的
    let arr1 = [1,2,2,3,4,5,6,6,7,7,7,7,7,7,7];
    let arr2 = [1,2,2,2,3,3,4,7,7,4,3,3,1];

    function getMaxAmount(data){
        let obj = {};
        data.forEach(val => {
            obj[val] = obj[val] ? obj[val] + 1 : 1
        })
        let num = 0; // 出现最多的数字
        let frequency = 0; // 出现最多的次数
        for(let key in obj){
            if(obj[key] > frequency){
                num = key;
                frequency = obj[key];
            }
        }
        return num + ' ' + frequency
    }

    console.log(getMaxAmount(arr3)) // 7  7  出现最多的数字 出现最多的次数
    console.log(getMaxAmount(arr2)) // 3  4
  • 这一种堪称完美
// 检测数组中出现最多次数的元素及次数
    let arr1 = [1,2,2,3,4,5,6,6,7,7,7,7,7,7,7];
    let arr2 = [1,2,2,2,3,3,4,7,7,4,3,3,1];
    let arr3 = [1,2,3,3,5,7,7,9,6,6];
function getMaxAmount(arr){
        if(!arr.length){
            return '不要传空数组忽悠我!';
        }
        let store = new Map();
        let result = {
            key:[],
            value:0,
        };
        arr.forEach(item=>{
            store[item] ? (store[item]++) : (store[item] = 1);
            let val = store[item];
            if(val > result.value){
                result.key = [item];
                result.value = val;
            }else if(val === result.value){
                result.key.push(item);
            }
        });
        return '数组中出现次数最多的元素是'+result.key.join('、')+',出现了'+result.value + '次。'
    }

    console.log(getMaxAmount(arr3)) // 数组中出现次数最多的元素是3、7、6,出现了2次。
    console.log(getMaxAmount(arr2)) // 数组中出现次数最多的元素是3,出现了4次。
  • reduce 累加器
    let arr3 = [1,2,3,3,5,7,7,9,6,6];

    const count = arr3.reduce((prev,cur)=>{
        if(cur in prev){
            prev[cur]++;
        }else{
            prev[cur]=1;
        }
        return prev
    },{})

    console.log(count)  // 输出元素与次数 {1: 1, 2: 1, 3: 2, 5: 1, 6: 2, 7: 2, 9: 1}
  • es5
	let arr3 = [1,2,3,3,5,7,7,9,6,6];
    function getMaxAmount(arr){
        let hashTable = {},
            max = 0;
        for(let i = 0; i < arr.length; i++){
            if(!(arr[i] in hashTable)){
                hashTable[arr[i]] = 1;
            }else {
                hashTable[arr[i]] += 1;
            }
            if(arr[i] > max){
                max = arr[i];
            }
        }

        let maxVal = 0;
        for(let j = 0; j <= max; j++){
            if(j in hashTable){
                if(hashTable[j] > maxVal){
                    maxVal = hashTable[j]
                }
            }
        }
        for(let j=0; j<= max; j++){
            if(hashTable[j] === maxVal){
                console.log(j, `${maxVal}次`)
            }
        }
    }
    getMaxAmount(arr3)  // 3 2次  6 2次  7  2次
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值