在字典中,我们使用[key,value]的形式来存储不重复的值。 其中,键名是用来查询特定元素的。 字典也称作映射。
创建一个字典
与set类相似,ECNAScript 6同样包含了一个Map类的实现,即我们所说的字典。
function Dictionary () {
var items = {};
}
考虑到字典的具体作用,我们使用一个对象来存储元素。 同样的,我们需要声明一些字典所需的方法:
- set(key, value):向字典中添加新元素。
- remove(key):通过使用键值来从字典中移除对应的值。
- has(key):判断某个键值是否存在于这个字典中。
- get(key):返回特定键值对应的数值。
- clear():将字典清空。
- size():返回字典中包含元素的数量。
- keys():将字典所包含的所有键名以数组形式返回。
- values():将字典所包含的所有数值以数组形式返回。
has和set
this.has = function (key) {
return key in items;
};
这里我们使用JavaScript中的in操作符来验证一个key是否是items对象的一个属性。
this.set = function (key, value) {
items[key] = value;
};
我们直接将value赋值给items对象的key属性,来添加一个新的值,或是更新一个已有的值。
remove
this.remove = function (key) {
if (this.has(key)) {
delete items[key];
return true;
}
return false;
};
get和values
this.get = function (key) {
return this.has(key) ? items[key] : undefined;
};
get方法首先会查找对应key值是否存在,如果存在,就返回该值,不存在的话就返回undefined。(null表示空值,undefined表示未定义)
this.values = function () {
var values = {};
for (var prop in items) {
if (this.hasOwnProperty(prop)) {
values.push(items[prop]);
}
}
return values;
};
values方法是以数组的形式返回所有的value。 首先,我们通过遍历拿到items内的属性名,再使用hasOwnProperty方法判断属性是否属于items自身,将其添加到values数组内,最后将values返回。
clear、size、keys、getItems
关于clear、size、keys方法我在上一篇博客中有详细介绍,有疑问的话你可以去看一下,这里我只做简单介绍。
this.clear = function () {
items = {};
};
this.size = function () {
return Object.keys(items).length;
};
this.keys = function () {
return Object.keys(items);
};
下面这个方法我们用返回items变量的方式来验证items属性的输出值。
this.getItems = function () {
return items;
};