javascript - 找出数组中元素出现最多的元素js
高洛峰
高洛峰 2017-04-11 13:23:16
[JavaScript讨论组]

给一个数组,找出这个数组中那一个元素出现次数最多,且说明最多出现几次,用js写出来,请问该这么写?麻烦知道的给解答下,谢谢

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
天蓬老师

hash啊 说个思路,定义一个对象obj,遍历数组, 对象的键为数组的元素,值为出现的次数。然后遍历这个对象,找出值为最大的那个。

function findMost(arr) {
    if (!arr.length) return
    if (arr.length === 1) return 1
    var res = {}
    // 遍历数组
    for (var i=0,l=arr.length;i<l;i++) {
        if (!res[arr[i]]) {
            res[arr[i]] = 1
        } else {
            res[arr[i]]++
        }
    }
    // 遍历 res
    var keys = Object.keys(res)
    var maxNum = 0, maxEle
    for (var i=0,l = keys.length;i<l;i++) {
        if (res[keys[i]] > maxNum) {
            maxNum = res[keys[i]]
            maxEle = keys[i]
        }
    }
    return maxNum
}
黄舟

看看这个例子,”用js实现读取出字符串中每个字符重复出现的次数?“ 或许对你有帮助

怪我咯
let counter = ['a', 'a', 'b', 'c', 'b'];

for (let i = 0, len = arr.length; i < len; i++ ) {
    counter[arr[i]] ? counter[arr[i]]++ : counter[arr[i]] = 1;
}

console.log(counter.max());
天蓬老师

是时候放大招了,

Array.prototype.getMost = function(){
  var obj = this.reduce((p,n) =>(p[n]++ ||(p[n] = 1),(p.max=p.max>=p[n]?p.max:p[n]), (p.key=p.max>p[n]?p.key:n), p), {});
  return 'key: '+ obj.key+ ' len: '+obj.max;
}

按照楼主的要求,返回那个元素和最多的次数。
程序有个 bug,最多出现次数为多个元素的时候,会返回最后一个,并不是第一个。

阿神

    var getElementUsedMost = function(arr){
            var hash = {};//利用hash 来记录次数
            var m = 0; //现在的最大次数
            var trueEl = null;//最大的元素
            for(var i = 0,len = arr.lenth; i < len; i++ ) {
                var el = arr[i];
                hash[el] === undefined ? hash[el] = 1 : (hash[el] ++);
                hash[el] >= m && (trueEl = el); 
            }
            return el;
        };

和一楼的想法是一样的,只是可以利用变量来记住次数,不用两次 遍历。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号