JavaScript 中的 Map方法
在 JavaScript 中,Map 是一种用于存储键值对的数据结构,相较于传统的对象(Object),Map 提供了更高效的键值对操作方式适合处理需要频繁操作键值对的场景。
1. 创建 Map
javascript">const map = new Map();
2、常用方法
2.1 添加键值对set(key, value)
如果键已经存在,set 会更新其值
javascript">map.set("name", "rose");
map.set("age", 20);
map.set("name", "jack");
console.log(map); // 输出 Map(2) { 'name' => 'jack', 'age' => 20 }
2.2 取指定键的值get(key)
如果键不存在,返回 undefined
javascript">const map=new Map()
map.set("name", "rose");
map.set("age", 20);
console.log(map.get("name"))//rose
console.log(map.get("id"))//undefined
2.3 检查 Map 中是否存在指定的键has(key)
返回值为返回 true 或 false。
javascript">const map=new Map()
map.set("name", "rose");
map.set("age", 20);
console.log(map.has("name"))//true
console.log(map.has("id"))//false
2.4 删除指定的键值对delete(key)
返回 true 如果成功删除,否则返回 false
javascript">const map=new Map()
map.set("name", "rose");
map.set("age", 20);
var res=map.delete("name")
console.log(res)//true
var res2=map.delete("id")
console.log(res2)//false
2.5 清空Map clear()
删除所有键值对。
javascript">map.clear();
console.log(map); // 输出 Map(0) {}
2.6 返回 Map 中键值对的数量size
javascript">const map=new Map()
map.set("name", "rose");
map.set("age", 20);
console.log(map.size)//2
3、迭代方法
3.1forEach(callback)
遍历 Map 中的每一个键值对,callback 函数接受三个参数:值、键、Map 本身。
javascript">map.forEach((value, key) => {console.log(`${key}: ${value}`);
});
// 输出:
// name: Alice
// age: 25
3.2 返回 Map 中所有键的迭代器(Iterator)keys()
可以用 for…of 来遍历。
javascript">for (let key of map.keys()) {console.log(key);
}
// 输出:
// name
// age
3.3 返回 Map 中所有值的迭代器(Iteratorvalues()
javascript">const map=new Map()
map.set("name", "rose");
map.set("age", 20);
for(let value of map.values()){console.log(value)
}
//rose 20
3.4 返回 Map 中所有键值对的迭代器entries()
每个键值对会以 [key, value] 的形式返回。
javascript">const map=new Map()
map.set("name", "rose");
map.set("age", 20);
for(let entry of map.entries()){console.log(entry)
}
//[ 'name', 'rose' ]
//[ 'age', 20 ]
应用小栗子
编写一个类,它允许获取和设置键-值对,并且每个键都有一个 过期时间 。
该类有三个公共方法:
set(key, value, duration) :接收参数为整型键 key 、整型值 value 和以毫秒为单位的持续时间 duration 。一旦 duration 到期后,这个键就无法访问。如果相同的未过期键已经存在,该方法将返回 true ,否则返回 false 。如果该键已经存在,则它的值和持续时间都应该被覆盖。
get(key) :如果存在一个未过期的键,它应该返回这个键相关的值。否则返回 -1 。
count() :返回未过期键的总数。
javascript">function TimeLimitedCache() {this.cache = new Map();
}TimeLimitedCache.prototype.set = function(key, value, duration) {const valueInCache = this.cache.get(key);if (valueInCache) {clearTimeout(valueInCache.timeout);}const timeout = setTimeout(() => this.cache.delete(key), duration);this.cache.set(key, { value, timeout });return Boolean(valueInCache);
}TimeLimitedCache.prototype.get = function(key) {return this.cache.has(key) ? this.cache.get(key).value : -1;
}TimeLimitedCache.prototype.count = function() {return this.cache.size;
}
题目来自leecode: 有时间限制的缓存https://leetcode.cn/problems/cache-with-time-limit/description/