JS编写一个函数,实现传入一个不定长度字符串,查找出重复次数前n名的字符并分别统计其次数

编写一个函数,实现传入一个不定长度字符串,查找出重复次数前n名的字符并分别统计其重复次数。写得好像比较复杂,大家有更好的方法欢迎留言指导,谢谢。

   function compare(string, n) {
        var array = [], countArr = [], sortArr = [], unique = [], rank = 0;
        // 找出string里的字符有哪些
        for (var i = 0; i < string.length; i++) {
            if (array.indexOf(string[i]) == -1) {
                array.push(string[i]);
            }
        }
        // 统计每个字符出现次数
        for (var j = 0; j < string.length; j++) {
            if (array.indexOf(string[j]) > -1) {
                if (!countArr[string[j]] ){
                    countArr[string[j]] = 0;
                }
                countArr[string[j]] += 1;
            }
        }
        // 将出现次数倒序排序
        for (item in countArr) {
            sortArr.push(countArr[item]);
        }
        sortArr.sort(function(a, b) {return b - a;});
        // 倒序排序后,前三个就是出现最多的三个
        for (var k = 0; k <= n-1; k++) {
            for (item1 in countArr) {
                if (sortArr[k] == countArr[item1]) {
                     rank += 1;//排名
                    // 防止重复显示结果
                    if (unique.indexOf(item1) == -1) {
                        unique.push(item1);
                        console.log('第' + rank + '名是' + item1 + ',出现次数为' + sortArr[k]);
                    }
                }
            }
        }
    }
    compare("kkkaaallaaalkkcsljbnn", 3);

运行结果如下:



评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值