ts 手动实现 ts 中的map

实现的功能如下:

  • 按照键,删除对应的键值对 del()
  • 循环每一个键值对 forEach()
  • 得到当前键值对的数量 size
  • 判断某个键是否存在 has()
  • 重新设置某个键对应的值,如果不存在,则添加 set()
  • 清除键值对 clear()

效果如下:

代码如下:

export interface Cb<K, V> {/*** 键值对的 key 和 val, 无返回*/(key: K, val: V): void;
}export class dic<K, V> {// 定义两个容器,来装对应的键集合或者值集合private keys: K[] = [];private vals: V[] = [];/*** 重新设置某个键对应的值,如果不存在,则添加* @param key * @param val */set(key: K, val: V) {// 判断键集合中是否存在,存在的话直接来改const index = this.keys.indexOf(key);if (index >= 0) {// 存在直接修改this.vals[index] = val;} else {// 不存在,直接添加this.keys.push(key);this.vals.push(val);}}/*** 遍历键值对* @param callback */forEach(callback: Cb<K, V>) {this.keys.forEach((key, index) => {callback(key, this.vals[index]);})}/*** 通过指定的key 来删除val* @param key */del(key: K): Boolean {const index = this.keys.indexOf(key);if (index < 0) {// 不存在,直接抛出错误,说该键不存在throw new Error('this key is not exist');} else {// 存在,直接删除this.keys.splice(index, 1);this.vals.splice(index, 1);return true;}}/*** 判断某个键是否存在* @param key */has(key: K) {return this.keys.includes(key);}/*** 得到键的数量*/get size() {return this.keys.length;}/*** 清除所有的键值对*/clear() {this.keys = [];this.vals = [];}
}

调用如下:

const dics = new dic<string, number>();dics.set('a', 11);
dics.set('b', 22);
dics.set('a', 33);
dics.set('c', 43);dics.forEach((k, v) => {console.log(`key:${k},val:${v}`);})dics.del('c');dics.forEach((k, v) => {console.log(`key:${k},val:${v}`);})console.log(dics.has('c'));
console.log(dics.has('a'));console.log('获取键的数量:', dics.size);dics.clear();
console.log('清除后键值对的长度', dics.size);

结果

ts 手动实现 ts 中的map相关推荐

  1. 使用TS开发小程序中遇到的问题

    在使用ts开发小程序的过程中,遇到了一些开发工具和关于ts的使用上的一些问题,并记录解决方法 1. ts开发过程中类型指定问题 Type 'number | undefined' is not ass ...

  2. TS学习(八) :TS中的类

    TS中类的书写 以前在js中书写类是这样的,然后我们在加上TS的类型检查你会发现报错了 class User {constructor(name:string,age:number) {this.na ...

  3. TS在vue2项目中的写法

    作为对照,先回忆一下js在vue2项目中的写法 <script> export default{data(){return {}},methods:{},computed:{},filte ...

  4. TypeScript(02)——函数,class类其他语法及ts在html页面中如何使用案例

    TypeScript学习笔记(02)--函数,class类其他语法及ts在html页面中如何使用案例 前言 正文 如何创建ts文件并使用 1.使用命令行创建ts环境 2. 让vscode创建ts文件并 ...

  5. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  6. ts入门笔记——ts类型声明和类型断言

    最近玩csdn比较少,欢迎关注我的掘金:杨灿就是杨火山 简单快速上手ts的学习路径: 一.熟悉掌握熟悉的强类型定义,初步学习编写强类型代码. 学习ts的声明变量类型,能够初步编写强类型代码: 学习ts ...

  7. TS学习笔记 TS基本类型

    基本类型 类型声明 类型声明是TS非常重要的一个特点 通过类型声明可以指定TS中变量(参数.形参)的类型 指定类型后,当为变量赋值时,TS编辑器会自动检查是否符合类型声明,符合则赋值,否则报错 指定类 ...

  8. fold函数_Java中使用Map and Fold进行函数式编程

    fold函数 在函数式编程中,Map和Fold是两个非常有用的运算符,它们属于每种函数式语言. 如果Map和Fold运算符是如此强大且必不可少,那么您如何解释说即使Java编程语言缺少这两个运算符,我 ...

  9. Java中使用Map and Fold进行功能性编程

    在函数式编程中,Map和Fold是两个非常有用的运算符,它们属于每种函数式语言. 如果Map和Fold运算符是如此强大且必不可少,那么您如何解释说即使Java编程语言缺少这两个运算符,我们也可以使用J ...

最新文章

  1. linux系统用户属组,关于 Linux系统用户、组和权限管理
  2. 062_JavaScript异常
  3. MySQL提高插入数据的效率(结合JDBC)
  4. oracle 驱动表提示错误代码,oracle驱动表以及如何确定驱动表
  5. linux下安装配置apache+php,linux下安装apache与php;Apache+PHP+MySQL配置攻略
  6. xp系统如何开启共享服务器,xp系统怎么关闭共享服务 xp系统共享打印机如何设置...
  7. win python_winpython是什么
  8. ABAP--动态创建类型和变量的使用程序样例
  9. Tuxera NTFS使用教程:如何在特定挂载的卷禁用文件系统缓存
  10. vs+qt 人脸识别GUI
  11. 顶级 Vue.js 开发工具
  12. 计算机辅助 高等数学教学,高等数学计算机辅助教学理论的探讨(6页)-原创力文档...
  13. 机器学习基本概念-有监督学习和无监督学习
  14. Office小知识(一)——word插入各种方向和条件个数的大括号{ }
  15. 【搬家】VB.NET开发全功能串口调试助手
  16. 几分之几在手机计算机上是哪个符号,数学各 种符号怎么表达比如根号,几分之几 – 手机爱问...
  17. 微信公众平台开发教程(三)_OAuth2.0认证
  18. view里面内容左对齐或者右对齐
  19. 关于交换数组元素的技术帖
  20. GridView 72般绝技 转自清清月儿

热门文章

  1. 【微信小程序】文章点赞功能的实现
  2. 微信小程序 延时执行 设置固定时间间隔
  3. 假定系统四个进程,p1、p2、p3、p4三种资源r1、r2、r3数量分别为9、3、6在T0时刻资源分配为下表:
  4. php仿qq登录界面安卓,Android_Android仿QQ登陆窗口实现原理,今天根据腾讯qq,我们做一个 - phpStudy...
  5. 今后,若你的公众号还按老方式发广告,罚款高的可达百万。有公众号已经被惩处了。
  6. 使用Eclipse把java文件打包成jar
  7. Python爬虫尝试-爬取指定股票的财务报表(东方财富网)
  8. 【C语言】——计算单词个数
  9. 【Mac】删除系统默认输入法
  10. 网易游戏(互娱)2020校招在线笔试-游戏研发