ES6的map统计字符串中出现最多的字母

在ES6中加入了两种数据结构,一个set和一个map,使js的操作更加简便。


map中的数据都是键值对的形式,和其他语言不同的是,它的键可以为任意形式的,包括undefined和NaN这种特殊的类型。

var map = new Map([[undefined, 1], [NaN, 2]]);
map.forEach(function (value, key){
    console.log(value, key);
});

这里写图片描述

从上面的例子可以看出,它可以将数组元素转换为键值对的形式,当然数组元素也要是数组才行。

如果两个键相同,后一个将会覆盖前一个的值

var map = new Map();
for (var i = 0; i < 5; i++){
    map.set("a", i);
}
map.forEach(function (value, key){
    console.log("值:"+ value + "  键:"+ key);
});

这里写图片描述
可以看出,在上面的代码中,map中的键为字符a,后一个值覆盖前一个的值,接下来就用这种特性来实现,统计字符串中出现最多字母的算法。

var str = "gchdfcgdfdgfyedu";
function countNum(str){
    var max = 0;
    var a;
    var map = new Map();
    for (var i = 0; i < str.length; i++){
            /*如果这个键的值不存在就返回undefined*/
        if (map.get(str[i]) != undefined){
            var count = map.get(str[i]) + 1;
            map.set(str[i], count);
            if (count > max){
                max = count;
                a = str[i];
            }
        }
        else{
            map.set(str[i], 1);
        }

    }
    map.forEach(function (value, key, map){
        console.log(value, key, map);
    });
    return a;
}

console.log(countNum(str));

这里写图片描述


-------------本文结束感谢您的阅读-------------