typeScript 之 Map

工具: PlayGround

源码: GitHub TypeScript


Map简介

MapES6引入的一种新的数据结构, 它是一只用于存储**键值对(key-value)**的集合。

let map = new Map();
let map_1: Map<string, number> = new Map();
let map_2: Map<string, number> = new Map([["a", 1], ["b", 2]]);console.log(typeof(map));       // object

代码相关:

// 参考 es2015.collection.d.ts
interface MapConstructor {new(): Map<any, any>;new <K, V>(entries?: readonly (readonly [K, V])[] | null): Map<K, V>;readonly prototype: Map<any, any>;
}
declare var Map: MapConstructor;

Map对象主要提供的接口如下:

接口返回值描述
sizenumber获取Map对象大小
set()this设置key-value增加元素,如果存在则覆盖value
get()V | undefined通过key获取value, 没有返回undefined
has()boolean通过key检测元素是否存在
delete()boolean通过key删除元素,如果成功返回true
clear()void清空所有元素
keys()IterableIterator返回keys的迭代器对象,类型为object
values()IterableIterator返回values的迭代器对象,类型为object
entries()IterableIterator<[K, V]>返回keys-values的迭代器对象,类型为object

代码相关:

// es2015.iterable.d.ts
interface Map<K, V> {// 返回map中每个条目的键值对的可迭代对象entries(): IterableIterator<[K, V]>;// 获取Map对象下所有的key集合keys(): IterableIterator<K>;// 获取Map对象下所有的value集合values(): IterableIterator<V>;
}// es2015.collection.d.ts
interface Map<K, V> {// 移除所有元素clear(): void;// 删除元素,删除成功返回truedelete(key: K): boolean;// 遍历,并执行指定的回调函数forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;// 根据key键返回value值,如果没有则返回undefinedget(key: K): V | undefined;// 检测指定键的元素是否存在has(key: K): boolean;// 添加键值对到Map中,如果key已经存在,则value被更新set(key: K, value: V): this;// 获取Map对象大小readonly size: number;
}

实例

基本使用:

// 创建map对象
let map = new Map();// --------- set设置键值对 ---------
map.set("key_1", 1);
map.set("key_2", 2);
map.set("key_3", "c");
// Map (3) {"key_1" => 1, "key_2" => 2, "key_3" => "c"} 
console.log(map);   // 注意键值对如果key已经存在,则value会更新
map.set("key_3", 3);
// Map (3) {"key_1" => 1, "key_2" => 2, "key_3" => 3} 
console.log(map);   // --------- has/get 获取值相关 ---------
// 通过has检测是否元素存在, 如果存在返回true 
// 通过get获取value, 如果不存在则返回undefined
console.log(map.has("key_3"),map.get("key_3"));      // true,  3 
console.log(map.has("key_5"),map.get("key_5"));      // false,  undefined // --------- delete/clear 删除元素 ---------
let isDelete = map.delete("key_2");
// true,  Map (2) {"key_1" => 1, "key_3" => 3} 
console.log(isDelete, map); // 删除所有元素
map.clear();
console.log(map);       // Map (0) {}

遍历对象主要通过如下:

  • forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void 遍历执行回调相关
  • keys(): IterableIterator 获取keys的迭代器对象遍历
  • values(): IterableIterator 获取values的迭代器对象遍历
  • entries(): IterableIterator<[K, V]> 获取keys-values的迭代器对象遍历
let map = new Map();// 生成键值对
for (let key = 0; key < 4; key++) {const value = Math.floor(Math.random() * 1000);map.set(key, value);
}
console.log(map);// key遍历
for (let key of map.keys()) {console.log(key);
}// value遍历
for (let value of map.values()) {console.log(value);
}// key-value遍历 
for (let entry of map.entries()) {console.log(entry[0], entry[1]);
}// forEach遍历
map.forEach((value, key, map) => {console.log(key, value);
})

其他

Map对象是不支持自动排序的, 它是按照set插入元素的顺序来排列的。 如果希望对Map对象排序,可以通过获取keys进行排序,类似代码:

const map = new Map<string, number>();
map.set("b", 2);
map.set("a", 1);
map.set("c", 3);const sortedKeys = Array.from(map.keys()).sort();
for (const key of sortedKeys) {console.log(key, map.get(key));
}/*
[LOG]: "a",  1 
[LOG]: "b",  2 
[LOG]: "c",  3 
*/

Map对象中,通过key查找value,比对key的时候是严格按照**===进行比对的, 因此可以拓展下, 对象中可以对key**设置为null, 但不推荐, 会存在未知的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/44950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux驱动开发之点亮三盏小灯

头文件 #ifndef __HEAD_H__ #define __HEAD_H__//LED1和LED3的硬件地址 #define PHY_LED1_MODER 0x50006000 #define PHY_LED1_ODR 0x50006014 #define PHY_LED1_RCC 0x50000A28 //LED2的硬件地址 #define PHY_LED2_MODER 0x50007000 #define PHY_LED2_ODR 0x50007014 #define…

机器学习深度学习——NLP实战(情感分析模型——数据集)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——BERT&#xff08;来自transformer的双向编码器表示&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…

Unity如何控制声音大小(包括静音功能)

一&#xff1a;UGUI制作 1. 首先在【层级】下面创建UI里面的Slider组件。设置好它对应的宽度和高度。 2.调整Slider滑动条的填充颜色。一般声音颜色我黄色&#xff0c;所以我们也调成黄色。 我们尝试滑动Slider里面的value。 a.滑动前。 b.滑动一半。 c.滑动完。 从以上滑动va…

DeFINE:用于神经序列建模的深度分解输入令牌嵌入

一、说明 DeFINE&#xff0c;是华盛顿大学和艾伦人工智能开发的自然语言处理工具&#xff0c;可以处理的范围是&#xff1a;NLP、语言模型、LM、神经机器翻译、NMT、变压器、变压器-XL等&#xff1b;本文对token-bedding进行生成。 借助DeFINE&#xff0c;Transformer-XL可以在…

汽车级36V、4A同步降压转换器MAX20404AFOD/VY、MAX20404AFOC/VY、MAX20404AFOA/VY开关稳压器

MAX20404是小型同步降压转换器&#xff0c;集成了高端和低端开关。这些IC均设计为可在3V到36V的宽输入电压范围内提供高达4A的电流。电压质量可以通过观察PGOOD信号来监测。该器件可以在99%的占空比下运行&#xff0c;非常适合汽车和工业应用。 MAX20404提供可编程输出电压或5…

Debian查询硬件状态

很早以前写过一个查询树霉派硬件状态的文章&#xff0c;用是Python写的一个小程序。里面用到了vcgencmd这个测温度的内部命令&#xff0c;但这个命令在debian里面没有&#xff0c;debian里只有lm_sensors的外部命令&#xff0c;需要安装&#xff1a;apt-get install lm_sensors…

python:tkinter + cef 模仿 mdict 界面

cefpython3 其上游是C开发的CEF&#xff08;基于webkit、V8&#xff09;&#xff0c; CEF 即 (Chromium Embedder Framework)&#xff0c; 是基于Google Chromium项目的开源 Web browser控件(WebView)。 可查看github文档&#xff1a;cefpython api pip install cefpython3 c…

linu系统卸载centos自带的jdk、手动安装jdk

linux的使用过程中&#xff0c;总是要使用jdk的&#xff0c;有的linux系统自带的openjdk&#xff0c;总是不太好用&#xff1b;本文以centos7为例&#xff0c;安装jdk1.8版本 1.查看系统中是否有自带的jdk或者已经被安装 java -version [rootmysql5 local]# java -version ja…

TCP编程流程(补充)

目录 1、listen&#xff1a; 2、listen、tcp三次握手 3、 发送缓冲区和接收缓冲区&#xff1a; 4、tcp编程启用多线程 1、listen&#xff1a; 执行listen会创建一个监听队列 listen(sockfd,5) 2、listen、tcp三次握手 三次握手 3、 发送缓冲区和接收缓冲区&#xff1a;…

SpringBoot复习:(52)不再需要使用@EnableTransactionManagement的原因

在Spring项目中&#xff0c;要用事务&#xff0c;需要EnableTransactionManagement注解加Transactional注解。而在SpringBoot项目&#xff0c;有事务的自动配置类TransactionAutoConfiguration,代码如下&#xff1a; 可以在其内部类EnableTransactionManagementConfiguratio…

2017年3月全国计算机等级考试真题(C语言二级)

2017年3月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 每个学校有一名校长&#xff0c;且不同学校的校长可以是同一人&#xff0c;则实体学校和实体校长间的联系是 A. 多对一 B. 多对多 C. 一对一 D. 一对多 正确答案&#xff1a;A 第2题 若有以下定义…

批量将excel中字段为“八百”替换成“九百”

要批量将Excel中字段为"八百"的内容替换为"九百"&#xff0c;您可以使用Python的openpyxl库来实现。以下是一个示例代码演示如何读取Excel文件并进行替换操作&#xff1a; from openpyxl import load_workbook # 打开Excel文件 wb load_workbook(your_ex…

[JavaWeb]【一】入门JavaWeb开发总概及HTML、CSS、JavaScript

目录 一 特色 二 收获​编辑 三 什么是web? 四 网站的工作流程 五 web网站的开发模式​编辑 六 web开发课程学习安排 七、初始web前端 八 HTML、CSS 8.1 什么是HTNL\CSS(w3cschool) 8.2 HTML快速入门 8.3 VS Code开发工具 8.3.1 插件 8.3.2 主题&#xff08;改变颜色&…

Python写一个创意五子棋游戏

前言 在本教程中&#xff0c;我们将使用Python写一个创意五子棋游戏 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 首先 GomokuGame 类的构造函数 __ini…

深入理解高并发编程 - 深度解析ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor 继承自 ThreadPoolExecutor 并实现了 ScheduledExecutorService 接口&#xff0c;这使得它可以同时充当线程池和定时任务调度器。 构造方法 public ScheduledThreadPoolExecutor(int corePoolSize) {super(corePoolSize, Integer.MAX_VALUE, 0, …

Redis、Memcache和MongoDB的区别

>>Memcached Memcached的优点&#xff1a; Memcached可以利用多核优势&#xff0c;单实例吞吐量极高&#xff0c;可以达到几十万QPS&#xff08;取决于key、value的字节大小以及服务器硬件性能&#xff0c;日常环境中QPS高峰大约在4-6w左右&#xff09;。适用于最大程度…

图数据库_Neo4j_Centos7.9安装Neo4j社区版3.5.4_基于jdk1.8---Neo4j图数据库工作笔记0011

首先上传安装包,到opt/soft目录 然后看一下jdk安装的是什么版本的,因为在neo4j 4以后就必须要用jdk11 以上的版本,我这里还用着jdk1.8 所以 我这里用3.5.4的版本 关于下载地址: https://dist.neo4j.org/neo4j-community-3.5.4-unix.tar.gz 然后再去解压到/opt/module目录下 …

【目标检测】目标检测 相关学习笔记

目标检测算法 PASCALVOC2012数据集 挑战赛主要分为 图像分类 目标检测 目标分割 动作识别 数据集分为四个大类 交通&#xff08;飞机 船 公交车 摩托车&#xff09; 住房&#xff08;杯子 椅子 餐桌 沙发&#xff09; 动物&#xff08;鸟 猫 奶牛 狗 马 羊&#xff09; 其他&a…

2023国赛数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

[JavaWeb]【四】web后端开发-SpringBootWeb入门

目录 一 Spring 二 SpringBootWeb入门 2.1 入门需求 2.2 分析 2.3 开始创建SpringBootWeb 2.4 创建类实现需求 2.5 启动程序 2.6 访问 三 HTTP协议 3.1 HTTP-概述 3.2 HTTP-请求协议 3.3 HTTP-响应协议 3.3.1 响应状态码 && 响应类型 3.4 HTTP-协议解析 前言…