JS面试:找出数组中出现次数最多的元素及其次数

1.使用map存储对应的数据,key是数据,value是出现的次数

function GetArrayMost(arr){
    var arrMap = new Map();
    var key = arr[0],
        value = 1;
    arr.forEach((item, index) => {
      if (arrMap.get(item) !== undefined) {
        let num = arrMap.get(item);
        arrMap.set(item, ++num);
      } else {
        arrMap.set(item, 1);
      }
      if (arrMap.get(item) > value) {
        key = item;
        value = arrMap.get(item);
      }
    });
    return [key,value];
}
//测试
var arr = [1,2,3,4,5,6,7,1,12,3,3,3,3,3,3,3,3,3]
console.log(
  "次数最多的元素为:",
  GetArrayMost(arr)[0],
  ",次数为:",
  GetArrayMost(arr)[1]
);
//次数最多的元素为: 3 ,次数为: 10

2.有点问题

function GetArrayMost__reduce(arr){
    var obj = arr.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 obj;
}


console.log(
  "次数最多的元素为:",
  GetArrayMost__reduce(arr).key,
  ",次数为:",
  GetArrayMost__reduce(arr).max
);

3.

function GetArrayMost__reduce(arr) {
    var maxElement;
    var maxNum = 1;
  var obj = arr.reduce(
    (p, n) => {
        p[n]? p[n]++: p[n] = 1;
        if(p[n] > maxNum){
            maxElement = n;
            maxNum++;
        }
        return p;
    },
    {}
  );
  return [maxElement, maxNum];
}

console.log(GetArrayMost__reduce(arr));

console.log(
  "次数最多的元素为:",
  GetArrayMost__reduce(arr)[0],
  ",次数为:",
  GetArrayMost__reduce(arr)[1]
);

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值