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 键盘keyCode键码值表
Dec 24 Javascript
javascript中节点的最近的相关节点访问方法
Mar 20 Javascript
JS打开新窗口的2种方式
Apr 18 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
Apr 11 Javascript
jQuery mobile 移动web(4)
Dec 20 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
May 05 Javascript
javascript jquery对form元素的常见操作详解
Jun 12 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
Aug 24 jQuery
教你如何用node连接redis的示例代码
Jul 12 Javascript
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
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 array_push 数组函数
2009/12/26 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
8个有意思的JavaScript面试题
2019/07/30 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
Python实现把回车符\r\n转换成\n
2015/04/23 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
python抓取文件夹的所有文件
2018/02/27 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
python中upper是做什么用的
2020/07/20 Python
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
环境科学专业个人求职信
2013/12/15 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS