JavaScript 字典(Dictionary)
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)的更多相关文章
- javascript字典数据结构Dictionary实现
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- C#创建安全的字典(Dictionary)存储结构
在上面介绍过栈(Stack)的存储结构,接下来介绍另一种存储结构字典(Dictionary). 字典(Dictionary)里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是唯一的,而 ...
- 索引器、哈希表Hashtabl、字典Dictionary(转)
一.索引器 索引器类似于属性,不同之处在于它们的get访问器采用参数.要声明类或结构上的索引器,使用this关键字. 示例: 索引器示例代码 /// <summary> /// 存储星 ...
- Python 字典(Dictionary)操作详解
Python 字典(Dictionary)的详细操作方法. Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字 ...
- Python 字典(Dictionary) get()方法
描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 ...
- Python字典 (dictionary)
字典dict,是Python唯一的标准mapping类型,也是内置在Python解释器中的. mapping object把一个可哈希的值(hashable value)映射到一个任意的object上 ...
- Python 字典(Dictionary) setdefault()方法
描述 Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值. 语法 setdefault()方法语法: ...
- C#字典Dictionary排序(顺序、倒序)
这里是针对.NET版本过低的排序方式,没怎么用过,记录一下: 一.创建字典Dictionary 对象 假如 Dictionary 中保存的是一个网站页面流量,key 是网页名称,值value对应的是网 ...
随机推荐
- linux --> gcc编译之路径搜索
gcc编译之路径搜索 头文件 --> 搜寻先从-I开始; --> 找gcc的环境变量 : C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PA ...
- 安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息
1.进入loadrunner-11\Additional Components\IDE Add-Ins\MS Visual Studio .NET 2.安装:LRVS2005IDEAddInSetup ...
- 赛博杯-HMI流水灯-stack
stack(ret2libc) 分析 首先checksec一下,发现没开栈保护,可能是栈溢出. [*] '/root/Desktop/bin/pwn/stack_/stack' Arch: i386- ...
- 【Alpha版本】冲刺阶段 - Day5 - 破浪
今日进展 袁逸灏:解决音乐播放问题以及跳转问题.(5h) 刘伟康:大致检查了测试规范,参考了其他 alpha 阶段的博客.(1h) 刘先润:解决了敌车与障碍物溢出边界的代码问题,给用户车辆增加了火焰喷 ...
- ord在python是什么意思?
>>> help(ord)Help on built-in function ord in module builtins:ord(...) #这是一个函数 ord(c) -> ...
- Tornado 用户身份验证框架
1.安全cookie机制 import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def ge ...
- 从Nest到Nesk -- 模块化Node框架的实践
文: 达孚(沪江Web前端架构师) 本文原创,转至沪江技术 首先上一下项目地址(:>): Nest:https://github.com/nestjs/nest Nesk:https://git ...
- vue 的模板编译—ast(抽象语法树) 详解与实现
首先AST是什么? 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言 ...
- js判断flash文件是否加载完毕
轮询判断加载进度 img的加载完成有onload方法,一直不知道该怎么判断swf文件是否加载完毕了? 在应用中使用了轮询判断加载进度值PercentLoaded是否达到100,经测试,可以达到效果. ...
- vue 内联样式style中的background
在我们使用vue开发的时候 有很多时候我们需要用到背景图 这个时候会直接使用 内联样式 直接把你拿到的数据拼接上去 注意 在vue中直接使用style时 花括号一定别忘记 还有就是你的url一定 ...