js如何找出一个数组中出现次数最多的字符(区分字符串和数字)

例如[1,2,3,4,'1',2] 2是出现最多的 1和‘1’是两种

阅读 2.6k
2 个回答
function max(arr) {
    arr = arr.slice();
    var _arr = [];
    for (var i = arr.length; i--;) {
        if (typeof arr[i] === "string") {
            arr.unshift.apply(_arr, arr.splice(i, 1));
        }
    }
    arr.push.apply(arr.sort(), _arr.sort());
    var temp = +!!arr.length, count = temp;
    var next, cur = arr.shift(), ret = cur;
    for (;;) {
        if (!arr.length) return ret;
        next = arr.shift();
        temp = cur === next ? ++temp : 1;
        if (temp > count) {
            count = temp;
            ret = cur;
        }
        cur = next;
    }
}
console.dir(max([1, 2, 3, 4, "1", 2]));
[max] = [1,2,3,4,4,4,5,6,'1',2].reduce((acc,cur)=>(acc.set(cur,(acc.get(cur) || 0)+1),acc),new Map()).filter((val,key,arr)=>arr.every(nextVal=>val>=nextVal)).keys();
console.log(max);
//4

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题