Javascript学习数据结构--字典

定义

字典(dictionary)是一些元素的结合。每个元素有一个称作key的域,不同元素的key各不相同。

其抽象数据类型描述为:

抽象数据类型Dictionary

{

实例:

  具有不同关键字的元素组合

操作:

  set(key,value):向字典中添加新元素。
       delete(key):通过使用键值来从字典中移除键值对应的数据值。
       has(key):如果某个键值存在于这个字典中,则返回true,反之则返回false。
       get(key):通过键值查找特定的数值并返回。
       clear():将这个字典中的所有元素全部删除。
       size():返回字典所包含元素的数量。与数组的length属性类似。
       keys():将字典所包含的所有键名以数组形式返回。
       values():将字典所包含的所有数值以数组形式返回。

}

有重复元素的字典(dictionary with duplicates)与上面定义的字典相似,只是它允许多个元素有相同的关键字。在有重复元素的字典中,在进行搜索和删除时需要一个规则来消除歧义。也就是说,如果要搜索关键字为k的元素,那么在所有关键字为k值得元素中应该返回哪一个。

字典可以保存在线性序列(e1,e2,e3...)中,既可以用公式化描述的方式,也可以用链表的方式实现。在字典中,我们用[键,值]的形式来存储数据。

创建字典

//创建一个空的实例数组
    var items = {};

函数说明

判断某个值是否存在

使用JavaScript中的in操作符来验证一个key是否是items对象的一个属性。

 this.has = function (key) {
    return key in items;
};

添加新元素

直接将value设为items对象的key属性的值。它可以用来给字典添加一个新的值,或者用来更新一个已有的值。

this.set = function (key, value) {
        items[key] = value; //value设为items对象的key属性的值
    };

移除键值对应的数据值

remove操作符来从items对象中移除key属性。

this.delete = function (key) {
    if (this.has(key)) {
        delete items[key];
        return true;
    }
    return false;
};

查找一个特定的项

使用三目运算符判断,简洁明了。

this.get = function (key) {
        return this.has(key) ? items[key] : undefined;
    };

字典所包含的所有数值以数组形式返回

使用has函数来验证key确实存在,然后将它的值加入values数组。

this.values = function () {
        var values = [];
        for (var k in items) { //遍历数组
            if (this.has(k)) {
                values.push(items[k]); //如果存在,加入数组中
            }
        }
        return values;
    };

返回在Dictionary类中所有用于标识值的键名

this.keys = function () {
        return Object.keys(items);
    };

items属性的输出值

this.getItems = function () {
        return items;
    };

移除集合中的所有项

直接将字典集置空

this.clear = function () {
        items = {}; // 直接制空
    };

返回集合所包含元素的数量

this.size = function () {
        return Object.keys(items).length; //返回长度
    };

测试

//创建字典对象
    var dictionary = new Dictionary();
    //添加三个元素
    dictionary.set('Jack', '[email protected]');
    dictionary.set('John', '[email protected]');
    dictionary.set('yjk', '[email protected]');
    //判断是否存在
    console.log(dictionary.has('Gandalf'));         //false
    //返回长度
    console.log(dictionary.size());                 //3
    //返回字典中的键值
    console.log(dictionary.keys());                 //["Jack", "John", "yjk"]
    //返回字典的值
    console.log(dictionary.values());               //["[email protected]", "[email protected]", "[email protected]"]
    //得到yjk的电子邮件
    console.log(dictionary.get('yjk'));             //[email protected]
    //删除john的内容
    dictionary.delete('John');      

    //查看字典
    console.log(dictionary.keys());                 //["Jack", "yjk"]
    console.log(dictionary.values());               //["[email protected]", "[email protected]"]
    console.log(dictionary.getItems());             //{Jack: "[email protected]", yjk: "[email protected]"}

查看完整源代码

数据结构--字典__源代码

你可能感兴趣的:(Javascript学习,数据结构与算法)