数据结构:字典Map

WEB前端 waitig 390℃ 百度已收录 0评论

在字典中,我们使用[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;
};

本文由【waitig】发表在等英博客
本文固定链接:数据结构:字典Map
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)