字典是一种以键-值对形式存储数据的数据结构,如同手机通信录中,想要寻找一个电话时,只要找到名字就能够找到其电话号码。
JavaScript的Object类
就是以字典的形式设计的。这里将使用Object类
的特性,实现一个Dictionary类
,让字典类型的对象使用起来更加简单。算法
咱们将使用JavaScript实现字典结构,各部分功能使用注释说明。数组
/** * Dictionary 构造方法 * datastore 存储数据 */ function Dictionary () { this.datastore = new Array() this.add = add this.find = find this.remove = remove this.showAll = showAll this.count = count this.clear = clear this.showAllBySort = showAllBySort } /** * add() 方法进行添加数据 * @param {*} key * @param {*} value */ function add (key, value) { this.datastore[key] = value } /** * find() 方法进行查找key值对应的value * @param {*} key */ function find (key) { return this.datastore[key] } /** * remove() 方法进行删除对应的key值键值对 * @param {*} key */ function remove(key) { delete this.datastore[key] } /** * showAll() 方法进行遍历显示全部的key、value */ function showAll () { let datakeys = Array.prototype.slice.call(Object.keys(this.datastore)) for (let key in datakeys) { console.log(datakeys[key] + ' -> ' + this.datastore[datakeys[key]]) } } /** * showAllBySort() 方法进行遍历显示全部排序后的key、value */ function showAllBySort () { let datakeys = Array.prototype.slice.call(Object.keys(this.datastore)).sort() for (let key in datakeys) { console.log(datakeys[key] + ' -> ' + this.datastore[datakeys[key]]) } }
其中有几点我的认为须要强调:数据结构
delete
。该函数使用对键的引用做为参数,同时删除键与其关联的值。Object类
的keys()
方法能够返回传入参数中存储的全部键。(Object.keys()
与for...in
循环的区别主要在于for...in
循环会枚举其原型链上的属性)slice()
方法是从已有的数组中返回选定的元素length
方法,由于当键的类型为字符串时,length
属性没法使用使用JavaScript实现字典数据结构相对来讲难度不大,但咱们须要注意其中的一些细节部分。函数
参考资料:数据结构与算法JavaScript描述 第7章 字典 因为书上的源代码出现了错误,所以代码根据实际运行结果作了相应修改。