1、前言
字典是一种以键- 值对形式存储数据的数据结构,就像电话号码簿里的名字和电话号码一样。要找一个电话时,先找名字,名字找到了,紧挨着它的电话号码也就找到了。这里的键是指你用来查找的东西,值是查找得到的结果。JavaScript 的Object 类就是以字典的形式设计的。本章将使用Object 类本身的特性,实现一个Dictionary 类,让这种字典类型的对象使用起来更加简单。
2、Dictionary类
Dictionay 类的基础是Array 类,而不是Object 类。本章稍后将提到,我们想对字典中的键排序,而JavaScript 中是不能对对象的属性进行排序的。但是也不要忘记,JavaScript 中一切皆对象,数组也是对象。
//该方法接受两个参数:键和值。键是值在字典中的索引
function add(key, value) {
this.datastore[key] = value;
}
//该方法以键作为参数,返回和其关联的值
function find(key) {
return this.datastore[key];
}
//该函数是Object 类的一部分,使用对键的引用作为参数。该函数同时删掉键和与其关联的值
function remove(key) {
delete this.datastore[key];
}
//显示字典中所有的键
function showAll() {
for(var key in Object.keys(this.datastore)) {
console.log(key + " -> " + this.datastore[key]);
}
}
function Dictionary() {
this.add = add;
this.datastore = new Array();
this.find = find;
this.remove = remove;
this.showAll = showAll;
}
var pbook = new Dictionary();
pbook.add("Mike","123");
pbook.add("David", "345");
pbook.add("Cynthia", "456");
//David's extension: 345
console.log("David's extension: " + pbook.find("David"));
pbook.remove("David");
/*0 -> undefined
1 -> undefined*/
pbook.showAll();
3、Dictionary类的辅助方法
定义一些在特定情况下有用的辅助方法。比如,要是能知道字典中的元素个数
function count() {
var n = 0;
for(var key in Object.keys(this.datastore)) {
++n;
}
return n;
}
var nums() = new Array();
nums[0] = 1;
nums[1] = 2;
console.log(nums.length); // 显示2
var pbook = new Array();
pbook["David"] = 1;
pbook["Jennifer"] = 2;
console.log(pbook.length); // 显示0