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 相关文章推荐
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
Webwork 实现文件上传下载代码详解
Feb 02 Javascript
纯css下拉菜单 无需js
Aug 15 Javascript
jQuery 判断元素整理汇总
Feb 28 Javascript
JS正则表达式验证中文字符
May 08 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
Oct 11 Javascript
详解如何实现一个简单的Node.js脚手架
Dec 04 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
May 27 Javascript
vue打包相关细节整理(小结)
Sep 28 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
Mar 30 Javascript
详解Vue中CSS样式穿透问题
Sep 12 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下使用iconv需要注意的问题
2010/11/20 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
学习python的几条建议分享
2013/02/10 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
django 中QuerySet特性功能详解
2019/07/25 Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
2019/08/07 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
Python调用飞书发送消息的示例
2020/11/10 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
金宝贝童装官网:Gymboree
2016/08/31 全球购物
中职毕业生自我鉴定
2014/09/13 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
公司员工奖惩制度
2015/08/04 职场文书
合作意向书怎么写
2019/06/24 职场文书