当前位置: 首页 > news >正文

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, 但不推荐, 会存在未知的问题。

相关文章:

typeScript 之 Map

工具&#xff1a; PlayGround 源码&#xff1a; GitHub TypeScript Map简介 Map是ES6引入的一种新的数据结构&#xff0c; 它是一只用于存储**键值对(key-value)**的集合。 let map new Map(); let map_1: Map<string, number> new Map(); let map_2: Map<string…...

Apache Doris 入门教程29:文件管理器

文件管理器 Doris 中的一些功能需要使用一些用户自定义的文件。比如用于访问外部数据源的公钥、密钥文件、证书文件等等。文件管理器提供这样一个功能&#xff0c;能够让用户预先上传这些文件并保存在 Doris 系统中&#xff0c;然后可以在其他命令中引用或访问。 名词解释​ …...

【佳佳怪文献分享】MVFusion: 利用语义对齐的多视角 3D 物体检测雷达和相机融合

标题&#xff1a;MVFusion: Multi-View 3D Object Detection with Semantic-aligned Radar and Camera Fusion 作者&#xff1a;Zizhang Wu , Guilian Chen , Yuanzhu Gan , Lei Wang , Jian Pu 来源&#xff1a;2023 IEEE International Conference on Robotics and Automat…...

word 应用 打不开 显示一直是正在启动中

word打开来显示一直正在启动中&#xff0c;其他调用word的应用也打不开&#xff0c;网上查了下以后进程关闭spoolsv.exe,就可以正常打开word了...

Flink-----Yarn应用模式作业提交流程

Yarn应用模式作业提交流程 在Yarn当中又分为Session,PerJob,Application,建议和推荐使用独立集群的,其中就包含PerJob 和Application,但是1.17版本的Flink已将PerJob标记为过时,并且Application可以解决PerJob的一些痛点,减轻客户端的一些压力,所以需要重点了解Yarn应…...

Python学习笔记_基础篇(五)_数据类型之字典

一.基本数据类型 整数&#xff1a;int 字符串&#xff1a;str(注&#xff1a;\t等于一个tab键) 布尔值&#xff1a; bool 列表&#xff1a;list 列表用[] 元祖&#xff1a;tuple 元祖用&#xff08;&#xff09; 字典&#xff1a;dict 注&#xff1a;所有的数据类型都存在想对…...

【第三阶段】kotlin语言的安全调用操作符

&#xff1f;. fun main() {var name:String?"kotlin" //name是一个可空类型&#xff0c;发出广播&#xff0c;调用的地方必须补救措施namenullvar r name?.capitalize() //?. 如果namenull&#xff0c;那么?.的将不执行&#xff0c;就不会引发空指针异常prin…...

机器学习重要内容:特征工程之特征抽取

目录 1、简介 2、⭐为什么需要特征工程 3、特征抽取 3.1、简介 3.2、特征提取主要内容 3.3、字典特征提取 3.4、"one-hot"编码 3.5、文本特征提取 3.5.1、英文文本 3.5.2、结巴分词 3.5.3、中文文本 3.5.4、Tf-idf ⭐所属专栏&#xff1a;人工智能 文中提…...

Logic 2逻辑分析器捉到的CAN帧

代码开发环境 逻辑分析仪环境 MCU芯片环境&#xff1a;RH850/U2A16 逻辑分析器(LA)抓到的CAN帧 <完>...

手机的发展历史

目录 一.人类的通信方式变化 二.手机对人类通信的影响 三.手机的发展过程 四.手机对现代人的影响 一.人类的通信方式变化 人类通信方式的变化是一个非常广泛和复杂的话题&#xff0c;随着技术的进步和社会的发展&#xff0c;人类通信方式发生了许多重大的变化。下面是一些主…...

为什么要分库分表?

不急于上手实战 ShardingSphere 框架&#xff0c;先来复习下分库分表的基础概念&#xff0c;技术名词大多晦涩难懂&#xff0c;不要死记硬背理解最重要&#xff0c;当你捅破那层窗户纸&#xff0c;发现其实它也就那么回事。 什么是分库分表 分库分表是在海量数据下&#xff0…...

Unity游戏源码分享-中国象棋Unity5.6版本

Unity游戏源码分享-中国象棋Unity5.6版本 项目地址&#xff1a; https://download.csdn.net/download/Highning0007/88215699...

打造专属花店展示小程序

在当今社会&#xff0c;微信小程序已经成为了各行各业拓展客户资源的利器&#xff0c;而花店行业也不例外。通过打造一个独特的花店小程序&#xff0c;你可以为你的花店带来更多的曝光和客户资源。那么&#xff0c;如何制作一个专属的花店小程序呢&#xff1f;下面我们就来一步…...

SpringBoot整合、SpringBoot与异步任务

目录 一、背景描述二、简单使用方法三、原理五、使用自定义线程池1、默认使用2、如何使用自定义线程池 六、Async失效情况1、同一个类中&#xff0c;一个方法调用 Async标注的方法 一、背景描述 java 的代码是同步顺序执行&#xff0c;当我们需要执行异步操作时我们通常会去创…...

复习1-2天【80天学习完《深入理解计算机系统》】第六天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…...

62、华为昇腾开发板Atlas 200I DK A2配置mmpose的hrnet模型推理python/c++

基本思想&#xff1a;适配mmpose模型&#xff0c;记录一下流水帐&#xff0c;环境配置和模型来自&#xff0c;请查看参考链接。 链接: https://pan.baidu.com/s/1IkiwuZf1anyKX1sZkYmD1g?pwdi51s 提取码: i51s 一、转模型 (base) rootdavinci-mini:~/sxj731533730# atc --mo…...

【数据结构】双链表

大家好&#xff01;今天我们来学习数据结构中的双链表。&#xff08;我们这里讲解的是带头&#xff08;哨兵位&#xff09;双向循环链表哦~&#xff09; 目录 1.双链表的概念 2. 双链表的逻辑结构 3. 双链表的定义 4. 双链表的接口实现 4.1 动态申请一个新结点 4.2 双链表…...

android设置竖屏仍然跟随屏幕旋转怎么办

如题所问&#xff0c;我最近遇到一个bug&#xff0c;就是设置了摇感&#xff0c;然后有用户反馈说设置了手机下拉的系统设置-屏幕旋转-关闭。然后屏幕还是会旋转的问题。 首先&#xff0c;我们先从如何设置横竖屏了解下好了 设置横屏和竖屏的方法&#xff1a; 方法一&#x…...

java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 tbms

​ 项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以…...

【Java】2021 RoboCom 机器人开发者大赛-高职组(初赛)题解

7-1 机器人打招呼 机器人小白要来 RoboCom 参赛了&#xff0c;在赛场中遇到人要打个招呼。请你帮它设置好打招呼的这句话&#xff1a;“ni ye lai can jia RoboCom a?”。 输入格式&#xff1a; 本题没有输入。 输出格式&#xff1a; 在一行中输出 ni ye lai can jia Robo…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...