JavaScript 中的 Map方法

news/2024/12/15 1:10:41/

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/


http://www.ppmy.cn/news/1555161.html

相关文章

深拷贝详解:特点、实现方法、循环引用处理及性能评估

文章目录 深拷贝的特点实现深拷贝的方法1. 使用 JSON 方法2. 使用 lodash 库3. 手动实现4. 结构化克隆算法 深拷贝与循环引用性能评估解决对象引用问题的其他方法手动实现深拷贝处理循环引用 深拷贝的特点 深拷贝创建了一个全新的对象,并递归复制原对象内部的所有属…

【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石

我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 一、引言 1. 栈与队列在编程中的角色定位 栈和队列作为两种基本的数据结构,在众多编程场景中都有着独特的地位。它们为数据的有序…

安全见闻4

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&…

STM32 | ESP8266 服务器与客户端

先看懂模块的原理图 关于四个引脚(GPIO2,、GPIO0、CH_PO和CPIO16(RST))的定义如下:(是我自己收集的信息,肯定有不完整的部分。希望大家指正) GPIO0:当为高电平时代表从…

item2 for macos

安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh,所以不用安装,10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…

MySQL数据库——内置函数

1.日期函数 函数名称 描述 current_date() 当前日期 current_time() 当前时间 current_timestamp() 当前时间戳 date(datetime) 返回datetime参数的日期部分 date_add(date,interval d_value_type) 在date中添加日期或时间 interval后的数值单位可以是:y…

python数据分析之爬虫基础:requests详解

1、requests基本使用 1.1、requests介绍 requests是python中一个常用于发送HTTP请求的第三方库,它极大地简化了web服务交互的过程。它是唯一的一个非转基因的python HTTP库,人类可以安全享用。 1.2、requests库的安装 pip install -i https://pypi.tu…

【JavaWeb后端学习笔记】Maven项目管理

Maven 1、分模块设计2、Maven继承2.1 继承关系2.2 版本锁定 3、Maven聚合4、聚合与继承的关系 1、分模块设计 如果一个项目中含有大量的功能模块。可以考虑将这些功能分模块设计,逐一进行开发。例如将公共类可以定义在一个项目中,将通用工具类也放在一个…