JS基础--字典
字典
什么是字典?
字典是一种以键 - 值对形式存储数据的数据结构,就像电话号码簿里的名字和电话号码一样,要找一个电话时,先找名字,名字找到了,紧挨着它的电话号码也就找到了。这里的 键是指你用来查找的东西,值是查找得到的结果。
Dictionay 类的基础是 Array 类,而不是 Object 类,所以某些方法是不能执行的,这里只注重思想
function Dictionary() {
this.datastore = new Array();
this.add = add;
this.find = find;
this.remove = remove;
this.showAll = showAll;
}
- 向列表添加元素
function append(ele) {
this.store[this.listSize++] = ele;
}
- add方法–两个参数:键和值
function add(key, value) {
this.datastore[key] = value;
}
- find 方法
该方法以键作为参数,返回和其关联的值
function find(key) {
return this.datastore[key];
}
- remove 方法
从字典中删除键 - 值对需要使用 JavaScript 中的一个内置函数:delete。该函数是 Object 类的一部分,使用对键的引用作为参数。该函数同时删掉键和与其关联的值。
在这里要新建一个remove方法,delete掉索引所对应的值
function remove(key) {
delete this.datastore[key];
}
- showAll 方法
显示字典中所有的键 - 值对
调用 Object 类的 keys() 方法可以返回传入参数中存储的所有键
function showAll() {
for(var key in Object.keys(this.datastore)) {
print(key + " -> " + this.datastore[key]);
}
}
- count 方法
能知道字典中的元素个数
function count() {
var n = 0;
for(var key in Object.keys(this.datastore)) {
++n;
}
return n;
}
- clear 方法
function clear() {
for each (var key in Object.keys(this.datastore)) {
delete this.datastore[key];
}
}
- 添加排序功能
字典的主要用途是通过键取值,无须太关心数据在字典中的实际存储顺序。但如果要做到一个有序的字典,该如何规划?我们都知道数组是可以排序的。
var a = new Array();
a[0] = "Mike";
a[1] = "David";
console.log(a); //显示Mike,David a.sort();
console.log(a); //显示David,Mike
但是上面这种做法对以字符串作为键的字典是无效的,程序会没有任何输出。这和前面定义 count() 方法时碰到的情况一样,不过,这也不是大问题。用户关心的是显示字典的内容时,结果是有序的。可以使用Object.keys() 函数解决这个问题
function showAll() {
for(var key in Object.keys(this.datastore).sort()) {
console.log(key + " -> " + this.datastore[key]);
}
}
巧妙之处就是从数组 datastore 拿到键后,调用 sort() 方法对键重新排了序,以达到排序的功能。