TypeScript方式实现源码

//  set(key,value):向字典中添加新元素。
//  remove(key):通过使用键值来从字典中移除键值对应的数据值。
//  has(key):如果某个键值存在于这个字典中,则返回true,反之则返回false。
//  get(key):通过键值查找特定的数值并返回。
//  clear():将这个字典中的所有元素全部删除。
//  size():返回字典所包含元素的数量。与数组的length属性类似。
//  keys():将字典所包含的所有键名以数组形式返回。
//  values():将字典所包含的所有数值以数组形式返回。
 /**
* 字典
* @desc 与Set类相似,ECMAScript 6同样包含了一个Map类的实现,即我们所说的字典
*/
class Dictionary {
private items = {};
public set(key, value) {
this.items[key] = value;
}
public remove(key) {
if (this.has[key]) {
delete this.items[key];
return true;
} else {
return false;
}
}
public has(key) {
return key in this.items;
}
public get(key) {
return this.has(key) ? this.items[key] : undefined;
}
public clear() {
this.items = {};
}
public size() {
var count = ;
for (var prop in this.items) { //{5}
if (this.items.hasOwnProperty(prop)) //{6}
++count; //{7}
}
return count;
}
public keys() {
let values = [];
for (var k in this.items) {
if (this.has(k)) {
values.push(k);
}
}
return values;
}
public values(): Array<any> {
let values = [];
for (var k in this.items) {
if (this.has(k)) {
values.push(this.items[k]);
}
}
return values;
}
public getItems() {
return this.items;
}
}

字典 Dictionary

// 使用我们创建的类来执行如下代码:
var dictionary = new Dictionary();
dictionary.set('Gandalf', 'gandalf@email.com');
dictionary.set('John', 'johnsnow@email.com');
dictionary.set('Tyrion', 'tyrion@email.com');
// 如果执行了如下代码,输出结果将会是true:
console.log(dictionary.has('Gandalf'));
// 下面的代码将会输出3,因为我们向字典实例中添加了三个元素:
console.log(dictionary.size());
// 现在,执行下面的几行代码:
console.log(dictionary.keys());
console.log(dictionary.values());
console.log(dictionary.get('Tyrion'));
// 输出结果分别如下所示:
// ["Gandalf", "John", "Tyrion"]
// ["gandalf@email.com", "johnsnow@email.com", "tyrion@email.com"]
// tyrion@email.com
// 最后,再执行几行代码:
dictionary.remove('John');
// 再执行下面的代码:
console.log(dictionary.keys());
console.log(dictionary.values());
console.log(dictionary.getItems());
// 输出结果如下所示:
// ["Gandalf", "Tyrion"]
// ["gandalf@email.com", "tyrion@email.com"]
// Object {Gandalf: "gandalf@email.com", Tyrion: "tyrion@email.com"}
// 移除了一个元素后, 现在的dictionary实例中只包含两个元素了。 加粗的一行表现了items
// 对象的内部结构。

使用方式

JavaScript方式实现源码

 /**
* 字典
* @desc 与Set类相似,ECMAScript 6同样包含了一个Map类的实现,即我们所说的字典
*/
var Dictionary = (function () {
function Dictionary() {
this.items = {};
}
Dictionary.prototype.set = function (key, value) {
this.items[key] = value;
};
Dictionary.prototype.remove = function (key) {
if (this.has[key]) {
delete this.items[key];
return true;
}
else {
return false;
}
};
Dictionary.prototype.has = function (key) {
return key in this.items;
};
Dictionary.prototype.get = function (key) {
return this.has(key) ? this.items[key] : undefined;
};
Dictionary.prototype.clear = function () {
this.items = {};
};
Dictionary.prototype.size = function () {
var count = ;
for (var prop in this.items) {
if (this.items.hasOwnProperty(prop))
++count; //{7}
}
return count;
};
Dictionary.prototype.keys = function () {
var values = [];
for (var k in this.items) {
if (this.has(k)) {
values.push(k);
}
}
return values;
};
Dictionary.prototype.values = function () {
var values = [];
for (var k in this.items) {
if (this.has(k)) {
values.push(this.items[k]);
}
}
return values;
};
Dictionary.prototype.getItems = function () {
return this.items;
};
return Dictionary;
}());

字典 Dictionary

JavaScript 字典(Dictionary)的更多相关文章

  1. javascript字典数据结构Dictionary实现

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  2. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  3. C#创建安全的字典(Dictionary)存储结构

    在上面介绍过栈(Stack)的存储结构,接下来介绍另一种存储结构字典(Dictionary). 字典(Dictionary)里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是唯一的,而 ...

  4. 索引器、哈希表Hashtabl、字典Dictionary(转)

    一.索引器 索引器类似于属性,不同之处在于它们的get访问器采用参数.要声明类或结构上的索引器,使用this关键字. 示例:   索引器示例代码 /// <summary> /// 存储星 ...

  5. Python 字典(Dictionary)操作详解

    Python 字典(Dictionary)的详细操作方法. Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字 ...

  6. Python 字典(Dictionary) get()方法

    描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 ...

  7. Python字典 (dictionary)

    字典dict,是Python唯一的标准mapping类型,也是内置在Python解释器中的. mapping object把一个可哈希的值(hashable value)映射到一个任意的object上 ...

  8. Python 字典(Dictionary) setdefault()方法

    描述 Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值. 语法 setdefault()方法语法: ...

  9. C#字典Dictionary排序(顺序、倒序)

    这里是针对.NET版本过低的排序方式,没怎么用过,记录一下: 一.创建字典Dictionary 对象 假如 Dictionary 中保存的是一个网站页面流量,key 是网页名称,值value对应的是网 ...

随机推荐

  1. 第一次使用github、git工具,本地仓库、远程仓库使用

    一次使用git,记录下使用过程...可能还有很多东西可能还没理解,后期理解了再写吧 git是什么.,百度的回答: 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 使用过程一直在百度 ...

  2. 导入TensorFlow报错

    C:\....\Anaconda3\envs\py35\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the ...

  3. windows+CMake+mingw 搭建c c++开发环境

    layout: post title: "windows+CMake+mingw 搭建c c++开发环境" date: 2018-03-30 22:23:06 tags: wind ...

  4. python爬虫遇到状态码304,705

    304状态码是什么? 如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码.简单的表达就是:客户端已经 ...

  5. git常用命令速查

    创建 $ git init  #在当前目录下创建一个空的本地仓库 $ rm -rf  .git  #删除本地仓库 $ git add .  #把当前目录下的所有文件添加到暂存区 $ git commi ...

  6. 指令-arContentedit-可编辑的高度自适应的div

    <div  ar-contentedit="true" contenteditable="true"  contenteditable="pla ...

  7. C语言--第14.15周作业

    一. 7-3 将数组中的数逆序存放 1.代码 #include 2<stdio.h> int main() { int a[10]; int i, n, s; scanf("%d ...

  8. 201621123057 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口,interface,implements,方法签名,has-a,Comparable,Comparator. 1.2 尝试 ...

  9. python自动发邮件

    from email.header import Header from email.mime.text import MIMEText from email.utils import parsead ...

  10. 树莓派3启动wifi并且配置wifi

    概述 树莓派3内置了wifi和蓝牙模块,我们不用像以前的版本那样,再去购买一个外接的模块练到raspberry上. 当我们第一次启动了树莓派的时候,必然使用了网线,但是之后的每一次使用,我们当然更希望 ...