为了账号安全,请及时绑定邮箱和手机立即绑定

js如何找出数组中重复最多的元素

js如何找出数组中重复最多的元素

拉莫斯之舞 2018-07-15 15:18:48
如下array中 js如何找出数组中重复最多的元素(尽量用es6以上的语法,简洁点)let ary = ['赵', '钱', '孙', '孙', '李', '周', '李', '周', '李'];补充: 2018-7-17 10:42:53其实我最开始是用mockjs做的一个关于数组的练习, 现在这个问题就是func10的需求部分, demo=>https://codepen.io/vizocn/pen...点击预览func10现在还未完成, 想请教各位看有没有更好更简洁的方法解决.初始数组数据结构如下图
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

function search(arr){

    var maxCount = 0,

        maxItem = '',

        obj = {}

    arr.forEach(function(item){

        obj[item] ? (obj[item].count += 1) : obj[item] = {count: 1}

        obj[item].count > maxCount && (maxCount = obj[item].count, maxItem = item)

    })

    //return {item:maxItem,count:maxCount}

    return maxItem

}


查看完整回答
反对 回复 2018-07-19
?
jeck猫

TA贡献1909条经验 获得超7个赞

const d = {};

let ary = ['赵', '钱', '孙', '孙', '李', '周', '李', '周', '李'];

ary.forEach(k => !d[k] ? d[k] = 1 : d[k]++);

const max = Object.keys(d).sort((a, b) => d[b] - d[a])[0];

console.log(max)

不算定义变量的话就2行 够简洁了吧

const d = {};

let ary = ['赵', '钱', '孙', '孙', '李', '周', '李', '周', '周', '李'];

ary.forEach(k => !d[k] ? d[k] = 1 : d[k]++);

const result = Object.keys(d).sort((a, b) => d[b] - d[a]).filter((k, i, l) => d[k] === d[l[0]]);

console.log(result)

更新了一下 result 是现在是数组结果 最长数量一样的值都会列出。

如果只取最大值还是建议使用hfhan那种方式,比较正统,我这算 奇技淫巧 代码看起来短其实多了2次循环,不过如果你有把重复数量从大到小排序的需求倒是可以用用


查看完整回答
反对 回复 2018-07-19
  • 2 回答
  • 0 关注
  • 1467 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信