首页 > Web开发 > 详细

js实现哈希表(HashTable)

时间:2017-04-02 10:29:20      阅读:264      评论:0      收藏:0      [点我收藏+]

  在算法中,尤其是有关数组的算法中,哈希表的使用可以很好的解决问题,所以这篇文章会记录一些有关js实现哈希表并给出解决实际问题的例子。

第一部分:相关知识点

属性的枚举:

    var person = {
        name: "zzw",
        sex: "Male",
        age: 21
    };
    for (var prop in person) {
         console.log(prop + " ",person[prop]);
    }

输出:

技术分享

即对于对象而言,我们可以使用for in来枚举对象的属性。

 

属性的删除

    var person = {
        name: "zzw",
        sex: "Male",
        age: 21
    };
    var ifRemove = delete person.name;
    for (var prop in person) {
         console.log(prop + " ",person[prop]);
    }
    console.log(ifRemove);

对象的属性可以通过 delete 来删除,并且会有一个返回值。 如下:

技术分享

 

注意: 一般只有对象的属性才可以删除,而变量是不能删除的,如:

    var x = 1;
    console.log(delete x); 

这时打印台输出false,因为变量是不可被删除的。

 

 

检测属性是否存在

    var person = {
        name: "zzw",
        sex: "Male",
        age: 21
    };
    console.log("age" in person);
    console.log("someOther" in person);

前者返回true,后者返回false。 即我们可以使用in来确定一个对象是否含有该属性。

 

属性的添加

    var person = {
        name: "zzw",
        sex: "Male",
        age: 21
    };
    person["school"] = "XJTU";
    console.log(person);

 

 属性的添加非常简单,如上所示,最终打印出来的对象是包含 school 属性的。

 

 

第二部分: 使用js实现哈希表

  

    // 创建构造函数HashTable
    function HashTable() {
        // 初始化哈希表的记录条数size
        var size = 0;

        // 创建对象用于接受键值对
        var res = {};

        // 添加关键字,无返回值
        this.add = function (key, value) {

            //判断哈希表中是否存在key,若不存在,则size加1,且赋值 
            if (!this.containKey(key)) {
                size++;
            }

            // 如果之前不存在,赋值; 如果之前存在,覆盖。
            res[key] = value;
        };

        // 删除关键字, 如果哈希表中包含key,并且delete返回true则删除,并使得size减1
        this.remove = function (key) {
            if (this.containKey(key) && (delete res[key])) {
                size--;
            }
        };

        // 哈希表中是否包含key,返回一个布尔值
        this.containKey = function (key) {
            return (key in res);
        };

        // 哈希表中是否包含value,返回一个布尔值
        this.containValue = function (value) {

            // 遍历对象中的属性值,判断是否和给定value相等
            for (var prop in res) {
                if (res[prop] === value) {
                    return true;
                }
            }
            return false;
        };

        // 根据键获取value,如果不存在就返回null
        this.getValue = function (key) {
            return this.containKey(key) ? res[key] : null;
        };

        // 获取哈希表中的所有value, 返回一个数组
        this.getAllValues = function () {
            var values = [];
            for (var prop in res) {
                values.push(res[prop]);
            }
            return values;
        };

        // 根据值获取哈希表中的key,如果不存在就返回null
        this.getKey = function (value) {
            for (var prop in res) {
                if (res[prop] === value) {
                    return prop;
                }
            }

            // 遍历结束没有return,就返回null
            return null;
        };

        // 获取哈希表中所有的key,返回一个数组
        this.getAllKeys = function () {
            var keys = [];
            for (var prop in res) {
                keys.push(prop);
            }
            return keys;
        };

        // 获取哈希表中记录的条数,返回一个数值
        this.getSize = function () {
            return size;
        };

        // 清空哈希表,无返回值
        this.clear = function () {
            size = 0;
            res = {};
        };
    }

 

js实现哈希表(HashTable)

原文:http://www.cnblogs.com/zhuzhenwei918/p/6658260.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!