前言
字典是一种以键-值对形式存储数据的数据结构,如同手机通讯录中,想要寻找一个电话时,只要找到名字就可以找到其电话号码。
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]])
}
}
其中有几点个人认为需要强调:
- 我们想要删除键-值对时需要使用JavaScript中的内置函数——
delete
。该函数使用对键的引用作为参数,同时删除键与其关联的值。 - 我们使用
Object类
的keys()
方法可以返回传入参数中存储的所有键。(Object.keys()
与for...in
循环的区别主要在于for...in
循环会枚举其原型链上的属性) -
slice()
方法是从已有的数组中返回选定的元素 - 当我们在计算字典中元素的个数时,并没有直接使用
length
方法,因为当键的类型为字符串时,length
属性无法使用
结束语
使用JavaScript实现字典数据结构相对来说难度不大,但我们需要注意其中的一些细节部分。
参考资料:数据结构与算法JavaScript描述 第7章 字典
由于书上的源代码出现了错误,因此代码根据实际运行结果做了相应修改。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。