找出数组中元素出现最多的元素js

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

阅读 13.6k
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
}
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;
        };

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

推荐问题
宣传栏