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 相关文章推荐
jquery选择器(常用选择器说明)
Sep 28 Javascript
jquery ajax 局部无刷新更新数据的实现案例
Feb 08 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
Jul 27 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
jQuery操作动态生成的内容的方法
May 28 Javascript
vue2.0开发实践总结之疑难篇
Dec 07 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
May 02 Javascript
JS实现的找零张数最小问题示例
Nov 28 Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 jQuery
JS实现的判断方法、变量是否存在功能示例
Mar 28 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
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
python文件操作之目录遍历实例分析
2015/05/20 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
销售心得体会
2014/01/02 职场文书
承办会议欢迎词
2014/01/17 职场文书
数控专业自荐书范文
2014/03/16 职场文书
护理目标管理责任书
2014/07/25 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis