JavaScript中的Map数据结构详解
什么是Map数据结构
Map是JavaScript中一种新的数据结构,类似于对象,但是比对象更加灵活。Map可以将任意类型的值作为键名(包括对象、字符串、数字、布尔值等),并且不会将键名强制转换为字符串。Map的键值对个数没有限制,可以根据需要动态地增加或者删除键值对。Map内部实现了一个哈希表,因此增加、删除、查找键值对的速度都非常快。
Map的基本用法
创建Map对象
let map = new Map();
设置键值对
可以使用下面的方法向Map对象中添加键值对:
let key1 = 'key1';
let val1 = 'value1';
map.set(key1, val1);
获取值
通过键名获取对应的键值:
map.get(key1); // 'value1'
删除键值对
可以使用下面的方法删除键值对:
map.delete(key1);
判断是否包含键名
使用has
方法判断是否包含一个键名:
map.has(key1); // false
获取Map中所有键名
使用keys
方法获取Map中所有键名:
map.keys(); // ['key2', 'key3']
获取Map中所有键值
使用values
方法获取Map中所有键值:
map.values(); //[ 'value2', 'value3' ]
获取Map中所有键值对
可以使用以下代码获取Map中所有键值对:
map.entries(); // [ [ 'key2', 'value2' ], [ 'key3', 'value3' ] ]
遍历Map
可以通过以下方式来遍历Map:
1.使用for...of
循环:
for (let [key, value] of map) {
console.log(key + ' = ' + value);
}
2.使用forEach
方法:
map.forEach(function(value, key) {
console.log(key + ' = ' + value);
});
示例说明
示例1:统计字符串中每个字符出现的次数
可以使用Map来统计字符串中每个字符出现的次数,具体过程如下:
let str = 'abbccdd';
let map = new Map();
for(let i=0; i<str.length; i++){
let char = str.charAt(i);
if(map.has(char)){
map.set(char, map.get(char)+1);
}else{
map.set(char, 1)
}
}
console.log(map); // Map { 'a' => 1, 'b' => 2, 'c' => 2, 'd' => 2 }
示例2:存储函数返回结果
可以使用Map来存储某个函数返回结果,避免重复调用此函数,具体代码如下:
let map = new Map();
function getResult(key){
if(map.has(key)){
return map.get(key);
}else{
let result = //some time-consuming code here
map.set(key, result);
return result;
}
}
这样,下次再调用getResult
函数时,如果已经存储了key对应的结果,则直接从Map中获取结果,避免了重复计算。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中的Map数据结构详解 - Python技术站