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 相关文章推荐
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
Sep 13 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 Javascript
javascript引用类型指针的工作方式
Apr 13 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 Javascript
使用Node.js实现RESTful API的示例
Aug 01 Javascript
Vue2.0 slot分发内容与props验证的方法
Dec 12 Javascript
Vue 换肤的示例实践
Jan 23 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
Sep 01 Javascript
Webpack之tree-starking 解析
Sep 11 Javascript
JavaScript中的函数式编程详解
Aug 22 Javascript
vue实现拖拽交换位置
Apr 07 Vue.js
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提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
php中chdir()函数用法实例
2014/11/13 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
关于PHP开发的9条建议
2015/07/27 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
js日期联动示例
2014/05/02 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
竞聘书模板
2014/03/31 职场文书
初婚初育证明范本
2014/11/24 职场文书
罚站检讨书
2015/01/29 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
如何利用python创作字符画
2022/06/25 Python