【前端面试】js查询数组中重复最多次数的值

前端面试 – 笔试题

js查询数组中重复最多次数的值,注意:值不一定只有一个,可能有多个

2022.05.18
参加了人生中第一场面试的笔试,但是自己之前由于时间原因,并没有用JavaScript刷过算法,一些题目虽然有思路,但是C++的写法和JavaScript的不一样,我还是弄不出来。
放了暑假,我一定好好刷算法😭


该题的思路:
好像用map存储每个数字的个数行不通,我最开始的思路是用一个新数组存储,temp[index]++,但是行不通。最后看了答案,用一个对象存储,这个对象的属性是每个数字,属性值是这个数字的个数。

function foo(array) {
  let arr = [];//存放最多次数的值
  let temp = {};//保存每个数的个数
  let res = 0;//记录出现最多次数的个数
  array.forEach(item => {
    if(temp[item] === undefined) { //如果这个数之前没出现过
      temp[item] = 1;//将它的次数赋为1
    } else {
      temp[item]++;//次数++
    }
  });
  for(let i in temp) {//遍历下标
    if(temp[i] > res){//如果这个数的次数比之前出现过的最多次数还多
      arr.length = 0;//清空数组
      arr.push(Number(i));//将这个数加入最终答案,因为属性名是字符串,将它转换为数字
      res = temp[i];//更新最大次数
    }else if(temp[i] === res){//出现次数相同的数字
      arr.push(Number(i));//将答案加入数组
      res = temp[i];//更新最大次数
    }
  }
  return arr;
}

console.log(foo([1,1,2,5,5,4,6,9]));//[ 1, 5 ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛小y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值