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 相关文章推荐
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
jquery单行文字向上滚动效果的实现代码
Sep 05 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
Mar 01 Javascript
继续学习javascript闭包
Dec 03 Javascript
angularJS模态框$modal实例代码
May 27 Javascript
vue多页面开发和打包正确处理方法
Apr 20 Javascript
layui 优化button按钮和弹出框的方法
Aug 15 Javascript
使vue实现jQuery调用的两种方法
May 12 jQuery
微信小程序 腾讯地图SDK 获取当前地址实现解析
Aug 12 Javascript
js实现窗口全屏示例详解
Sep 17 Javascript
vue实现图片上传功能
May 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
全国中波电台频率表
2020/03/11 无线电
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python去掉字符串中重复字符的方法
2014/02/27 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
详解python的ORM中Pony用法
2018/02/09 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
大学生会计职业生涯规划范文
2014/02/28 职场文书
心理咨询承诺书
2014/05/20 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
小学感恩主题班会
2015/08/12 职场文书
2016年少先队活动总结
2016/04/06 职场文书