js模拟hashtable的简单实例


Posted in Javascript onMarch 06, 2014
function Hashtable()//自定义hashtable
{
    this._hash = new Object();
    this.add = function(key, value) {
        if (typeof (key) != "undefined") {
            if (this.contains(key) == false) {
                this._hash[key] = typeof (value) == "undefined" ? null : value;
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    this.remove = function(key) { delete this._hash[key]; }
    this.count = function() { var i = 0; for (var k in this._hash) { i++; } return i; }
    this.items = function(key) { return this._hash[key]; }
    this.contains = function(key) { return typeof (this._hash[key]) != "undefined"; }
    this.clear = function() { for (var k in this._hash) { delete this._hash[k]; } }
}

// js哈希表
function HashTable() {
    this.ObjArr = {};
    this.Count = 0;
    //添加
    this.Add = function(key, value) {
        if (this.ObjArr.hasOwnProperty(key)) {
            return false; //如果键已经存在,不添加
        }
        else {
            this.ObjArr[key] = value;
            this.Count++;
            return true;
        }
    }
    //是否包含某项
    this.Contains = function(key) {
        return this.ObjArr.hasOwnProperty(key);
    }
    //取某一项 其实等价于this.ObjArr[key]
    this.GetValue = function(key) {
        if (this.Contains(key)) {
            return this.ObjArr[key];
        }
        else {
            throw Error("Hashtable not cotains the key: " + String(key)); //脚本错误
            //return;
        }
    }
    //移除
    this.Remove = function(key) {
        if (this.Contains(key)) {
            delete this.ObjArr[key];
            this.Count--;
        }
    }
    //清空
    this.Clear = function() {
        this.ObjArr = {}; this.Count = 0;
    }
}
测试代码:
//员工
function employee(id, userName) {
    this.id = id;
    this.userName = userName;
}
function test() {
    var ht = new HashTable();
    var tmpEmployee = null;
    for (var i = 1; i < 6; i++) {
        tmpEmployee = new employee(i, "Employee_" + i);
        ht.Add(i, tmpEmployee);
    }
    for (var i = 1; i <= ht.Count; i++) {
        alert(ht.GetValue(i).userName); //其实等价于ht.ObjArr[i].userName
        //alert(ht.ObjArr[i].userName);
    }
    ht.Remove(1);
    alert(ht.Contains(1)); //false
    alert(ht.Contains(2)); //true
    //alert(ht.GetValue(1)); //异常
    var result = ht.GetValue(2);
    if (result != null) {
        alert("Employee Id:" + result.id + ";UserName:" + result.userName);
    }
    ht.Add(2, "这一个key已经存在!"); //Add无效
    //ht.Clear(); //清空
    alert(ht.Count);
}
Javascript 相关文章推荐
关于viewport,Ext.panel和Ext.form.panel的关系
May 07 Javascript
jQuery实现的类flash菜单效果代码
May 17 Javascript
让mayfish支持mysqli数据库驱动的实现方法
May 22 Javascript
jquery关于图形报表的运用实现代码
Jan 06 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
Mar 05 Javascript
JSF中confirm弹出框的用法示例介绍
Jan 07 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 Javascript
vue 组件 全局注册和局部注册的实现
Feb 28 Javascript
JS实现的集合去重,交集,并集,差集功能示例
Mar 13 Javascript
nginx部署多个vue项目的方法示例
Sep 06 Javascript
JavaScript简单实现鼠标拖动选择功能
Mar 06 #Javascript
用JS在浏览器中创建下载文件
Mar 05 #Javascript
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 #Javascript
js写的方法实现上传图片之后查看大图
Mar 05 #Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
Mar 05 #Javascript
JSON中双引号的轮回使用过程中一定要小心
Mar 05 #Javascript
关于jQuery中的each方法(jQuery到底干了什么)
Mar 05 #Javascript
You might like
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
CI框架中zip类应用示例
2014/06/17 PHP
php导出CSV抽象类实例
2014/09/24 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
js select常用操作控制代码
2010/03/16 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
python正则表达式的使用
2017/06/12 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
详解Python3 基本数据类型
2019/04/19 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
培训专员岗位职责
2014/02/26 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
先进班组事迹材料
2014/12/25 职场文书
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸