在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));