JavaScript 中的 Map方法

JavaScript 中的 Map方法

在 JavaScript 中,Map 是一种用于存储键值对的数据结构,相较于传统的对象(Object),Map 提供了更高效的键值对操作方式适合处理需要频繁操作键值对的场景。

1. 创建 Map

const map = new Map();

2、常用方法

2.1 添加键值对set(key, value)

如果键已经存在,set 会更新其值

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

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。

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

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()

删除所有键值对。

map.clear();
console.log(map); // 输出 Map(0) {}

2.6 返回 Map 中键值对的数量size

const map=new Map()
map.set("name", "rose");
map.set("age", 20);
console.log(map.size)//2

3、迭代方法

3.1forEach(callback)

遍历 Map 中的每一个键值对,callback 函数接受三个参数:值、键、Map 本身。

map.forEach((value, key) => {
  console.log(`${key}: ${value}`);
});
// 输出:
// name: Alice
// age: 25

3.2 返回 Map 中所有键的迭代器(Iterator)keys()

可以用 for…of 来遍历。

for (let key of map.keys()) {
  console.log(key);
}
// 输出:
// name
// age

3.3 返回 Map 中所有值的迭代器(Iteratorvalues()

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] 的形式返回。

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() :返回未过期键的总数。

在这里插入图片描述

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值