定义

字典(dictionary)是一些元素的结合。每个元素有一个称作key的域,不同元素的key各不相同。

其抽象数据类型描述为:

抽象数据类型Dictionary

{

实例:

  具有不同关键字的元素组合

操作:

  set(key,value):向字典中添加新元素。
       delete(key):通过使用键值来从字典中移除键值对应的数据值。
       has(key):如果某个键值存在于这个字典中,则返回true,反之则返回false。
       get(key):通过键值查找特定的数值并返回。
       clear():将这个字典中的所有元素全部删除。
       size():返回字典所包含元素的数量。与数组的length属性类似。
       keys():将字典所包含的所有键名以数组形式返回。
       values():将字典所包含的所有数值以数组形式返回。

}

有重复元素的字典(dictionary with duplicates)与上面定义的字典相似,只是它允许多个元素有相同的关键字。在有重复元素的字典中,在进行搜索和删除时需要一个规则来消除歧义。也就是说,如果要搜索关键字为k的元素,那么在所有关键字为k值得元素中应该返回哪一个。

字典可以保存在线性序列(e1,e2,e3...)中,既可以用公式化描述的方式,也可以用链表的方式实现。在字典中,我们用[键,值]的形式来存储数据。

创建字典

//创建一个空的实例数组var items = {};

函数说明

判断某个值是否存在

使用JavaScript中的in操作符来验证一个key是否是items对象的一个属性。

 this.has = function (key) {return key in items;
};

添加新元素

直接将value设为items对象的key属性的值。它可以用来给字典添加一个新的值,或者用来更新一个已有的值。

this.set = function (key, value) {items[key] = value; //value设为items对象的key属性的值};

移除键值对应的数据值

remove操作符来从items对象中移除key属性。

this.delete = function (key) {if (this.has(key)) {delete items[key];return true;}return false;
};

查找一个特定的项

使用三目运算符判断,简洁明了。

this.get = function (key) {return this.has(key) ? items[key] : undefined;};

字典所包含的所有数值以数组形式返回

使用has函数来验证key确实存在,然后将它的值加入values数组。

this.values = function () {var values = [];for (var k in items) { //遍历数组if (this.has(k)) {values.push(items[k]); //如果存在,加入数组中}}return values;};

返回在Dictionary类中所有用于标识值的键名

this.keys = function () {return Object.keys(items);};

items属性的输出值

this.getItems = function () {return items;};

移除集合中的所有项

直接将字典集置空

this.clear = function () {items = {}; // 直接制空};

返回集合所包含元素的数量

this.size = function () {return Object.keys(items).length; //返回长度};

测试

//创建字典对象var dictionary = new Dictionary();//添加三个元素dictionary.set('Jack', 'jack@email.com');dictionary.set('John', 'johnsnow@email.com');dictionary.set('yjk', '13118@gmail.com');//判断是否存在console.log(dictionary.has('Gandalf'));         //false//返回长度console.log(dictionary.size());                 //3//返回字典中的键值console.log(dictionary.keys());                 //["Jack", "John", "yjk"]//返回字典的值console.log(dictionary.values());               //["jack@email.com", "johnsnow@email.com", "13118@gmail.com"]//得到yjk的电子邮件console.log(dictionary.get('yjk'));             //13118@gmail.com//删除john的内容dictionary.delete('John');      //查看字典console.log(dictionary.keys());                 //["Jack", "yjk"]console.log(dictionary.values());               //["jack@email.com", "13118@gmail.com"]console.log(dictionary.getItems());             //{Jack: "jack@email.com", yjk: "13118@gmail.com"}

查看完整源代码

数据结构--字典__源代码

Javascript学习数据结构--字典相关推荐

  1. Javascript学习数据结构--集合(Set实现)

    定义 set是不允许重复元素的集合类型,set体系最常用的是HashSet ,TreeSet, LinkedHashSet.相同的元素是放不进去set的. HasHSet是使用HashMap实现的,只 ...

  2. JavaScript算法与数据结构——字典详解

    字典是一种以键-值对的形式存储数据的数据结构,接下来我们将使用JavaScript实现字典数据结构. 1.定义字典类 由于比较字典数据结构比较简单,就直接上代码好了. class Dictionary ...

  3. 前端获取div里面的标签_web前端教程JavaScript学习笔记DOM

    web前端教程JavaScript学习笔记 DOM一DOM(Document Object Model): 文档对象模型 其实就是操作 html 中的标签的一些能力 我们可以操作哪些内容 获取一个元素 ...

  4. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  5. 原来Github上也有这么多的JavaScript学习资源!

    程序员书库(ID:OpenSourceTop) 编译 书单来自:https://risingstars.js.org/2019/en/ 最近,bestofjs发布了2019年度JavaScript年度 ...

  6. 从零学习数据结构与算法---基础与课前准备笔记

    这里开始学习 数据结构与算法相关知识,这个主要是基于 极客时间 大佬  覃超老师的 算法训练营 和  王争老师的 数据结构与算法之美.这里再次感谢两位老师,下面文章内容主要是自己作为复习使用的笔记,如 ...

  7. Python学习.第六天.字典

    Python学习.第六天.字典 前言 一.什么是字典? 二.字典的原理 三.字典的创建与删除 四.字典的查询操作 五.字典元素的增.删.改操作 1.key的判断: 2.字典元素的删除 3.字典元素的新 ...

  8. 学习数据结构有什么用?

    当我们遇到一个实际问题时,首先需要解决两件事: (1)如何将数据存储在计算机中: (2)用什么方法和策略解决问题. 前者是数据结构,后者是算法.只有数据结构没有算法,相当于只把数据存储到计算机中,而没 ...

  9. javascript学习路线图

    史上最全的javascript学习路线图 JavaSctipt学习路线 完成整个课程大纲需要花上6~8周的时间,将学会完整的JavaScript语言(包括jQuery和一些HTML5).如果你没有时间 ...

最新文章

  1. 想要快速获客?送你 2 个小程序互推方法
  2. 上传项目到gitHub,上传报错和删除gitHub上的项目
  3. C#温故而知新学习系列之XML编程—Xml写入器XmlWriter类(三)
  4. Java 13 的下载安装教程
  5. ubuntu中,txt导入mysql数据库文件
  6. go语言os.exit(1)_Go语言-信号os.Interrupt和信号syscall.SIGTERM的应用
  7. 别转管理,十年程序员老鸟给新手的几条忠告(转)
  8. Unicode,ANSI,UTF-8的故事
  9. 用存储过程实现的分页程序
  10. 算法基础部分4-深度优先搜索
  11. 找不到 org/springframework/dao/support/PersistenceExceptionTranslator
  12. 怎么在云服务器上建网站_如何在云服务器上部署自己的网站?
  13. 对数周期天线工作原理
  14. 计算机阴影字 操作步骤,计算机一级Photoshop操作辅导:阴影字
  15. Error: [$injector:unpr] angular.js
  16. Express 报错:Failed to lookup view error in views directory 处理
  17. python 学习简记 《编程导论》 CH4CH5
  18. MATLAB模糊数据工具箱的使用
  19. Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
  20. [电影笔记]电影世界:接纳平凡的自己

热门文章

  1. 辽宁交通高等专科学校计算机专业宿舍,辽宁省交通高等专科学校宿舍条件怎么样 有独立卫生间和空调吗...
  2. 计算机等级考试二级Python讲座(二)
  3. 【Python】Python实战从入门到精通之二 -- 教你使用Python中列表操作
  4. 哪个Linux发行版运行kvm,如何在Linux发行版上安装和配置KVM和Open vSwitch
  5. java抽取注释_JAVA 注解教程(五)注解的提取
  6. MySQL 的 IFNULL()、ISNULL() 、 NULLIF()、IF() 函数
  7. c++的提示类未定义_推荐一款适合初学者的C/C++IDE
  8. linux -rpm,linux 的rpm命令
  9. 渗透测试入门15之常见端口安全测试
  10. 远程桌面连接服务器,提示身份验证错误,要求的函数不受支持,但又找不到加密Oracle修正