javascript Dictionary data structures
Dictionary常被称为数据字典,是一种用来保存键值对的数据结构,比如我们日常的电话本,就是一个Dictionary。我们通过键(名字),就可以访问到对应的值(电话号码)。在C++与java中我们都是使用map来构建这样一个Dictionary,只是名字不同而已。在javascript中对象就好像是一个Dictionary一样,因为对象就是一个属性名/属性值的集合。
为了更好的体现出Dictionary,我们可以基于Array与object来构建一个使用方便简单的Dictionary类:
Dictionary类:
<html> <head> <title>Date Example</title> </head> <body> <div id="content"></div> <input type="button" value="Set InnerHTML" onclick="testDate()"> <script type="text/javascript"> function Dictionary (){ this.dataArray = []; // 添加元素 this.add = function (key, item){ this.dataArray[key] = item; }; // 查找元素 this.find = function (key){ return this.dataArray[key]; }; // 删除元素 this.remove = function (key){ delete this.dataArray[key]; }; // 显示元素 this.showAllItems = function (){ for (var key in Object.keys(this.dataArray)){ console.log(key + ":" + this.dataArray[key]); } } } </script> </body> </html>
除了上面这些方法之外,我们也可以根据自己的使用来添加其他的方法与属性。
// 删除字典中所有元素
this.clearAll = function (){ for (var key in Object.keys(this.dataArray)){ delete this.dataArray[key]; } };
// 字典中的元素个数
this.itemsCount = function (){ var num = 0; for (var key in Object.keys(this.dataArray)){ ++num; } return num; }
在itemsCount中查询数量为什么不直接使用this.dataArray.length呢???这是因为在键的类型为字符串类型的时候,length这个属性就不起什么作用了。。。。
字典的用途大多说时候我们之关心通过键开获取值,不会去关心键的顺序问题,但是为了更好的显示我们前面说的那个电话本,可以对电话本中的键(名字)进行排序。
在javascript中我们常见的是对数组进行排序,那利用数组的sort()进行排序如何呢,你会看到silently。主要原因就是我们平时使用的数组是在数组按照整型值的索引下对数组元素进行排序的,现在的数组的索引变成了字符串,这种形式的排序也就失去了效果。其实我们可以取出Dictionary中的键,把键放入一个数组A中,然后对这个数组A进行排序,然后利用数组A来遍历Dictionary。Object.keys()就提供了这样一种方法:
this.sequenceShow = function (){ for (var key in Object.keys(this.dataArray).sort()){ console.log(key + ":" + this.dataArray[key]); } }
这样我们就可以实现把“键”进行排序了。。。