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. linux --> gcc编译之路径搜索

    gcc编译之路径搜索 头文件 --> 搜寻先从-I开始; --> 找gcc的环境变量 : C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PA ...

  2. 安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息

    1.进入loadrunner-11\Additional Components\IDE Add-Ins\MS Visual Studio .NET 2.安装:LRVS2005IDEAddInSetup ...

  3. 赛博杯-HMI流水灯-stack

    stack(ret2libc) 分析 首先checksec一下,发现没开栈保护,可能是栈溢出. [*] '/root/Desktop/bin/pwn/stack_/stack' Arch: i386- ...

  4. 【Alpha版本】冲刺阶段 - Day5 - 破浪

    今日进展 袁逸灏:解决音乐播放问题以及跳转问题.(5h) 刘伟康:大致检查了测试规范,参考了其他 alpha 阶段的博客.(1h) 刘先润:解决了敌车与障碍物溢出边界的代码问题,给用户车辆增加了火焰喷 ...

  5. ord在python是什么意思?

    >>> help(ord)Help on built-in function ord in module builtins:ord(...) #这是一个函数 ord(c) -> ...

  6. Tornado 用户身份验证框架

    1.安全cookie机制 import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def ge ...

  7. 从Nest到Nesk -- 模块化Node框架的实践

    文: 达孚(沪江Web前端架构师) 本文原创,转至沪江技术 首先上一下项目地址(:>): Nest:https://github.com/nestjs/nest Nesk:https://git ...

  8. vue 的模板编译—ast(抽象语法树) 详解与实现

    首先AST是什么? 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言 ...

  9. js判断flash文件是否加载完毕

    轮询判断加载进度 img的加载完成有onload方法,一直不知道该怎么判断swf文件是否加载完毕了? 在应用中使用了轮询判断加载进度值PercentLoaded是否达到100,经测试,可以达到效果. ...

  10. vue 内联样式style中的background

    在我们使用vue开发的时候   有很多时候我们需要用到背景图 这个时候会直接使用 内联样式 直接把你拿到的数据拼接上去 注意  在vue中直接使用style时 花括号一定别忘记 还有就是你的url一定 ...