java script词典_javascript中的字典

1.概念

字典是一种以键值对的形式存储的数据结构,就系那个电话本中的名字和电话号码一样。要找到一个电话首先要找到名字,再根据名字找到电话号码。这里的键就是指用来查找的东西,值就是查找得到的结果。

Javascript中的object类就是已字典的形式设计的。这里使用object类本身的特性,实现一个dictionary类,让字典类型的对戏那个使用起来更加简单。

dictionary类的基础是array类,不是object类。稍后将会提到,我们想对字典中的键排序,而Javascript中是不能对对象的属性经行排序。Javascript中一切皆是对象,数组也是对象。

先使用下面的方法来定义dictionary类:

functionDictionary(){this.datastore = newObject();

}

先来定义一个add方法,该方法接受两个参数,键和值。键是值在字典下的索引,如下:

functionadd(key, value){this.datastore[key] =value;

}

接下来定义find方法,该方法以键作为参数,返回和其关联的值,代码如下:

functionfind(key){return this.datastore[key];

}

从字典中删除键值对需要使用Javascript中的一个内置函数,delete,这个函数是object类的一部分,使用对键的引用作为参数,该函数同时删掉和其关联的值。代码如下:

functionremove(key){delete this.datastore[key];

}

最后我们希望可以显示字典中所有的键值对,下面是一个完成该任务的方法:

functionshowAll(){for (var key in this.datastore) {

document.write(key+ '->' + this.datastore[key]);

document.write('
');

}

}

我们还可以定义一些在特定情况下有用的辅助方法。比如,要是知道字典中元素的个数就好了,那么可以顶一个count方法,如下:

functioncount(){var n = 0;for (var key in this.datastore) {++n;

}returnn;

}

很多看官和我一样会想,能不能用length属性,这是不行的,因为当键的类型为字符串的时候,length属性就不管用了,可以使用下面的代码来测试:

var nums = newArray();

nums[0] = 1;

nums[1] = 2;

console.info(nums.length);//显示2

var pbook = newArray();

pbook["David"] = 1;

pbook["Jennifer"] = 2;

console.info(pbook.length);//显示0

clear是另外一种辅助方法,定义如下:

functionclear(){for (var key in this.datastore) {delete this.datastore[key];

}

}

字典的主要用途是通过键取值,我们无需关系数据在字典中的实际存储顺序。然后很多人希望看到一个有序的字典。我的做法是先把键值对的所有键值取出来,放在一个数组中,然后对这个数组排序,最后按照排序后的顺序输出值,如下:

functionsort(){var keys =Array();for (var key in this.datastore) {

keys.push( key );

}

keys.sort();for (var i=0; i

document.write(keys[i]+ '->' + this.datastore[keys[i]]);

document.write('
');

}

}

2.代码实现

下面看看上面所有的问题代码:

functionDictionary(){this.add =add;this.datastore = newObject();this.find =find;this.remove =remove;this.showAll =showAll;this.length =length;this.count =count;this.clear =clear;this.sort =sort;

}functionadd(key, value){this.datastore[key] =value;

}functionfind(key){return this.datastore[key];

}functionremove(key){delete this.datastore[key];

}functioncount(){var n = 0;for (var key in this.datastore) {++n;

}returnn;

}functionshowAll(){for (var key in this.datastore) {

document.write(key+ '->' + this.datastore[key]);

document.write('
');

}

}functionsort(){var keys =Array();for (var key in this.datastore) {

keys.push( key );

}

keys.sort();for (var i=0; i

document.write(keys[i]+ '->' + this.datastore[keys[i]]);

document.write('
');

}

}functionclear(){for (var key in this.datastore) {delete this.datastore[key];

}

}var pbook = newDictionary();

pbook.add("Raymond","123");

pbook.add("David", "345");

pbook.add("Cynthia", "456");

pbook.showAll();

document.write('after sort:' + '
')

pbook.sort();

document.write("Number of entries: " + pbook.count() + '
');

document.write("David's extension: " + pbook.find("David") + '
');

pbook.showAll();

pbook.clear();

document.write("Number of entries: " + pbook.count() + '
');

上面代码在浏览器下的输出结果如下:

76ead9993417d6b8efcbe3ef15a91b19.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值