web前端面试-求数组中出现次数最多的元素

web前端面试-求数组中出现次数最多的元素

示例:let str = [‘a’, ‘b’, ‘a’, ‘s’, ‘f’, ‘g’, ‘g’, ‘g’, ‘h’, ‘j’, ‘j’, ‘k’, ‘k’, ‘g’, ‘f’, ‘d’, ‘d’, ‘s’, ‘s’, ‘s’, ‘s’, ‘s’, ‘3’, ‘4’, ‘4’, ‘4’, ‘3’, ‘4’, ‘3’];

思路分析:对象+擂台思想

想办法把数组中的所有元素变成新的样子对象:{a:3,b:2,s:6…}
通过对象遍历再用擂主思想找出最大值即可

1.定义一个空对象
2.让数组里面的值等于对象的属性名
3.先判断这个空对象中的属性值是否为undefinty
4.如果这个空对象的属性值不为空那就让这个空对象的属性值+1
5.打印这个空对象,空对象的属性名为这个数组的值,而这个空对象的值为这个数组相同值的个数

代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        // 思路:
        // 1.定义一个空对象
        // 2.让数组里面的值等于对象的属性名
        // 3.先判断这个空对象中的属性值是否为undefinty
        // 4.如果这个空对象的属性值不为空那就让这个空对象的属性值+1
        // 5.打印这个空对象,空对象的属性名为这个数组的值,而这个空对象的值为这个数组相同值的个数

        let str = ['a', 'b', 'a', 's', 'f', 'g', 'g', 'g', 'h', 'j', 'j', 'k', 'k', 'g', 'f', 'd', 'd', 's', 's', 's', 's', 's', '3', '4', '4', '4', '3', '4', '3'];

        // 定义一个空对象
        let obj = {};

        // 遍历数组:从数组中取出元素:a b s 3 4...;判定对象中是否存在

        str.forEach(function (item) {
            // item就是数组中的每个元素:a b s 3 4...
            if (obj[item] === undefined) {
                // * 不存在:undefined:第一次出现:增加一个当前元素,值为1
                obj[item] = 1;
            } else {
                // * 存在:就有值,说明不是第一次出现:在原来的基础上+1
                obj[item]++;
            }
        });
        console.log(obj);
        // 求次数最多的字符及次数 擂台思想
        // 声明两个变量接收次数最多的属性名和这个属性名的值,属性名暂时为空
        let max = "";
        let num;
        for (key in obj) {
            // console.log(key, dx[key]);
            if (obj[key] > max) {
                max = obj[key];
                num = key;
                // console.log(num,max);
            }
        }
        console.log("字符串中出现次数最多的字符为:", num, "出现次数为", max);

    </script>
</body>

</html>
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值