javascript中的字典
1.概念
字典是一种以键值对的形式存储的数据结构,就系那个电话本中的名字和电话号码一样。要找到一个电话首先要找到名字,再根据名字找到电话号码。这里的键就是指用来查找的东西,值就是查找得到的结果。
Javascript中的object类就是已字典的形式设计的。这里使用object类本身的特性,实现一个dictionary类,让字典类型的对戏那个使用起来更加简单。
dictionary类的基础是array类,不是object类。稍后将会提到,我们想对字典中的键排序,而Javascript中是不能对对象的属性经行排序。Javascript中一切皆是对象,数组也是对象。
先使用下面的方法来定义dictionary类:
function Dictionary(){
this.datastore = new Object();
}
先来定义一个add方法,该方法接受两个参数,键和值。键是值在字典下的索引,如下:
function add(key, value){
this.datastore[key] = value;
}
接下来定义find方法,该方法以键作为参数,返回和其关联的值,代码如下:
function find(key){
return this.datastore[key];
}
从字典中删除键值对需要使用Javascript中的一个内置函数,delete,这个函数是object类的一部分,使用对键的引用作为参数,该函数同时删掉和其关联的值。代码如下:
function remove(key){
delete this.datastore[key];
}
最后我们希望可以显示字典中所有的键值对,下面是一个完成该任务的方法:
function showAll(){
for (var key in this.datastore) {
document.write(key + '->' + this.datastore[key]);
document.write('<br>');
}
}
我们还可以定义一些在特定情况下有用的辅助方法。比如,要是知道字典中元素的个数就好了,那么可以顶一个count方法,如下:
function count(){
var n = 0;
for (var key in this.datastore) {
++n;
}
return n;
}
很多看官和我一样会想,能不能用length属性,这是不行的,因为当键的类型为字符串的时候,length属性就不管用了,可以使用下面的代码来测试:
var nums = new Array();
nums[0] = 1;
nums[1] = 2;
console.info(nums.length); // 显示2
var pbook = new Array();
pbook["David"] = 1;
pbook["Jennifer"] = 2;
console.info(pbook.length); // 显示0
clear是另外一种辅助方法,定义如下:
function clear(){
for (var key in this.datastore) {
delete this.datastore[key];
}
}
字典的主要用途是通过键取值,我们无需关系数据在字典中的实际存储顺序。然后很多人希望看到一个有序的字典。我的做法是先把键值对的所有键值取出来,放在一个数组中,然后对这个数组排序,最后按照排序后的顺序输出值,如下:
function sort(){
var keys = Array();
for (var key in this.datastore) {
keys.push( key );
}
keys.sort();
for (var i=0; i<keys.length; i++) {
document.write(keys[i] + '->' + this.datastore[keys[i]]);
document.write('<br>');
}
}
2.代码实现
下面看看上面所有的问题代码:
function Dictionary(){
this.add = add;
this.datastore = new Object();
this.find = find;
this.remove = remove;
this.showAll = showAll;
this.length = length;
this.count = count;
this.clear = clear;
this.sort = sort;
}
function add(key, value){
this.datastore[key] = value;
}
function find(key){
return this.datastore[key];
}
function remove(key){
delete this.datastore[key];
}
function count(){
var n = 0;
for (var key in this.datastore) {
++n;
}
return n;
}
function showAll(){
for (var key in this.datastore) {
document.write(key + '->' + this.datastore[key]);
document.write('<br>');
}
}
function sort(){
var keys = Array();
for (var key in this.datastore) {
keys.push( key );
}
keys.sort();
for (var i=0; i<keys.length; i++) {
document.write(keys[i] + '->' + this.datastore[keys[i]]);
document.write('<br>');
}
}
function clear(){
for (var key in this.datastore) {
delete this.datastore[key];
}
}
var pbook = new Dictionary();
pbook.add("Raymond","123");
pbook.add("David", "345");
pbook.add("Cynthia", "456");
pbook.showAll();
document.write('after sort:' + '<br>')
pbook.sort();
document.write("Number of entries: " + pbook.count() + '<br>');
document.write("David's extension: " + pbook.find("David") + '<br>');
pbook.showAll();
pbook.clear();
document.write("Number of entries: " + pbook.count() + '<br>');
上面代码在浏览器下的输出结果如下:

javascript中的字典的更多相关文章
- JavaScript中创建字典对象(dictionary)实例
这篇文章主要介绍了JavaScript中创建字典对象(dictionary)实例,本文直接给出了实现的源码,并给出了使用示例,需要的朋友可以参考下 对于JavaScript来说,其自身的Array对象 ...
- Javascript中的字典和散列
function Dictionary() { var items={}; this.set=function (key,value) { items[key]=value; }; this.remo ...
- 深夜重温JavaScript中的对象和数组
这一块实际上已经学过了,因为没有学好,在工作过程中遇到一些对象或者数组的操作,会去百度查找,浪费了许多宝贵的时间,所以特地再拐过头来重新学习. 对象 基本概念: 对象这种基本的数据结构还有其他很多种叫 ...
- Javascript 中判断对象为空
发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是 ...
- javascript中数组常用的方法
在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法.数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'. ...
- JavaScript 中 4 种常见的内存泄露陷阱
了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...
- [转] JavaScript中的属性:如何遍历属性
在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScript中的对象通常都处在某个原型链中,它会从 ...
- JavaScript中的内存泄漏以及如何处理
随着现在的编程语言功能越来越成熟.复杂,内存管理也容易被大家忽略.本文将会讨论JavaScript中的内存泄漏以及如何处理,方便大家在使用JavaScript编码时,更好的应对内存泄漏带来的问题. 概 ...
- JavaScript 中常见的内存泄露陷阱(摘)
内存泄露是每个开发者最终都不得不面对的问题.即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况.内存泄露会导致一系列问题,比如:运行缓慢,崩溃,高延迟,甚至一些与其他应用相关的问题. 什么是内 ...
随机推荐
- 解决phpmyadmin 点击表结构时卡顿、一直加载、打不开的问题
本文内容是转自其它站点,亲测可用. 第一步,打开 ./version_check.php文件,找到以下代码: $save = true; $file ='http://www.phpmyadmin.n ...
- 将项目同时托管到Github和Git@OSC
http://my.oschina.net/GIIoOS/blog/404555?fromerr=KHvn8UKH 摘要 Github是最大的git代码托管平台,GIT@OSC是国内最大的git代码 ...
- 解决phpmyadmin上传文件大小限制的配置方法(转)
phpmyadmin导入SQL文件时涉及到phpmyadmin上传文件大小限制问题,默认phpmyadmin上传文件大小为2M,如果想要 phpmyadmin上传超过2M大文件,就需要修改phpmya ...
- 在web项目中使用cxf开发webservice,包含spring支持
本文主要介绍了,如何使用cxf内置的例子,学会开发webserivce,在web项目中使用,且包含spring支持. webserivce的开发可以使用cxf或者axis,好像还有httpclient ...
- JSP内置对象--pageContext对象(非常重要!!!)
pageContext对象是javax.servlet.jsp.PageContext类的实例,只要表示的是一个jsp页面的上下文,而且功能强大,几乎可以操作各种内置对象. >forward(S ...
- .NET中公共变量与属性的区别
在我们的程序中经常会出现以下的代码: 如: 成员变量 public string Name; 或者用属性 private string name ...
- nat和打洞
http://michankong.blog.51cto.com/1464983/761270 可能有点乱,下面以故事的形式叙述一下这个情景. 人物:A(男) NAT_A(A家接线员) B(女) NA ...
- Friends and Subsequences
Friends and Subsequences Mike and !Mike are old childhood rivals, they are opposite in everything th ...
- copy ,abs,includes 3个函数
copy: Copy函数原型:标头: <algorithm> OutputIterator copy( InputIterator begin, InputIterator end, o ...
- Spring MVC 与ExtJS完美集成
http://blog.csdn.net/q262800095/article/details/12021191 http://www.jb51.net/article/25267.htm