typeScript 之 Map
工具: PlayGround
源码: GitHub TypeScript
Map简介
Map是ES6引入的一种新的数据结构, 它是一只用于存储**键值对(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对象主要提供的接口如下:
| 接口 | 返回值 | 描述 |
|---|---|---|
| size | number | 获取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
工具: PlayGround 源码: GitHub TypeScript Map简介 Map是ES6引入的一种新的数据结构, 它是一只用于存储**键值对(key-value)**的集合。 let map new Map(); let map_1: Map<string, number> new Map(); let map_2: Map<string…...
Apache Doris 入门教程29:文件管理器
文件管理器 Doris 中的一些功能需要使用一些用户自定义的文件。比如用于访问外部数据源的公钥、密钥文件、证书文件等等。文件管理器提供这样一个功能,能够让用户预先上传这些文件并保存在 Doris 系统中,然后可以在其他命令中引用或访问。 名词解释 …...
【佳佳怪文献分享】MVFusion: 利用语义对齐的多视角 3D 物体检测雷达和相机融合
标题:MVFusion: Multi-View 3D Object Detection with Semantic-aligned Radar and Camera Fusion 作者:Zizhang Wu , Guilian Chen , Yuanzhu Gan , Lei Wang , Jian Pu 来源:2023 IEEE International Conference on Robotics and Automat…...
word 应用 打不开 显示一直是正在启动中
word打开来显示一直正在启动中,其他调用word的应用也打不开,网上查了下以后进程关闭spoolsv.exe,就可以正常打开word了...
Flink-----Yarn应用模式作业提交流程
Yarn应用模式作业提交流程 在Yarn当中又分为Session,PerJob,Application,建议和推荐使用独立集群的,其中就包含PerJob 和Application,但是1.17版本的Flink已将PerJob标记为过时,并且Application可以解决PerJob的一些痛点,减轻客户端的一些压力,所以需要重点了解Yarn应…...
Python学习笔记_基础篇(五)_数据类型之字典
一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list 列表用[] 元祖:tuple 元祖用() 字典:dict 注:所有的数据类型都存在想对…...
【第三阶段】kotlin语言的安全调用操作符
?. fun main() {var name:String?"kotlin" //name是一个可空类型,发出广播,调用的地方必须补救措施namenullvar r name?.capitalize() //?. 如果namenull,那么?.的将不执行,就不会引发空指针异常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 ⭐所属专栏:人工智能 文中提…...
Logic 2逻辑分析器捉到的CAN帧
代码开发环境 逻辑分析仪环境 MCU芯片环境:RH850/U2A16 逻辑分析器(LA)抓到的CAN帧 <完>...
手机的发展历史
目录 一.人类的通信方式变化 二.手机对人类通信的影响 三.手机的发展过程 四.手机对现代人的影响 一.人类的通信方式变化 人类通信方式的变化是一个非常广泛和复杂的话题,随着技术的进步和社会的发展,人类通信方式发生了许多重大的变化。下面是一些主…...
为什么要分库分表?
不急于上手实战 ShardingSphere 框架,先来复习下分库分表的基础概念,技术名词大多晦涩难懂,不要死记硬背理解最重要,当你捅破那层窗户纸,发现其实它也就那么回事。 什么是分库分表 分库分表是在海量数据下࿰…...
Unity游戏源码分享-中国象棋Unity5.6版本
Unity游戏源码分享-中国象棋Unity5.6版本 项目地址: https://download.csdn.net/download/Highning0007/88215699...
打造专属花店展示小程序
在当今社会,微信小程序已经成为了各行各业拓展客户资源的利器,而花店行业也不例外。通过打造一个独特的花店小程序,你可以为你的花店带来更多的曝光和客户资源。那么,如何制作一个专属的花店小程序呢?下面我们就来一步…...
SpringBoot整合、SpringBoot与异步任务
目录 一、背景描述二、简单使用方法三、原理五、使用自定义线程池1、默认使用2、如何使用自定义线程池 六、Async失效情况1、同一个类中,一个方法调用 Async标注的方法 一、背景描述 java 的代码是同步顺序执行,当我们需要执行异步操作时我们通常会去创…...
复习1-2天【80天学习完《深入理解计算机系统》】第六天
专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示&#…...
62、华为昇腾开发板Atlas 200I DK A2配置mmpose的hrnet模型推理python/c++
基本思想:适配mmpose模型,记录一下流水帐,环境配置和模型来自,请查看参考链接。 链接: https://pan.baidu.com/s/1IkiwuZf1anyKX1sZkYmD1g?pwdi51s 提取码: i51s 一、转模型 (base) rootdavinci-mini:~/sxj731533730# atc --mo…...
【数据结构】双链表
大家好!今天我们来学习数据结构中的双链表。(我们这里讲解的是带头(哨兵位)双向循环链表哦~) 目录 1.双链表的概念 2. 双链表的逻辑结构 3. 双链表的定义 4. 双链表的接口实现 4.1 动态申请一个新结点 4.2 双链表…...
android设置竖屏仍然跟随屏幕旋转怎么办
如题所问,我最近遇到一个bug,就是设置了摇感,然后有用户反馈说设置了手机下拉的系统设置-屏幕旋转-关闭。然后屏幕还是会旋转的问题。 首先,我们先从如何设置横竖屏了解下好了 设置横屏和竖屏的方法: 方法一&#x…...
java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 tbms
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…...
【Java】2021 RoboCom 机器人开发者大赛-高职组(初赛)题解
7-1 机器人打招呼 机器人小白要来 RoboCom 参赛了,在赛场中遇到人要打个招呼。请你帮它设置好打招呼的这句话:“ni ye lai can jia RoboCom a?”。 输入格式: 本题没有输入。 输出格式: 在一行中输出 ni ye lai can jia Robo…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
