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.validate使用攻略 第一部
Jul 01 Javascript
javascript开发中因空格引发的错误
Nov 08 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
Mar 31 Javascript
JQuery EasyUI 数字格式化处理示例
May 05 Javascript
JQuery日期插件datepicker的使用方法
Mar 03 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
Aug 05 Javascript
JS限制条件补全问题实例分析
Dec 16 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
Jan 03 Javascript
Ajax验证用户名或昵称是否已被注册
Apr 05 Javascript
node中实现删除目录的几种方法
Jun 24 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
Oct 16 Javascript
vue+spring boot实现校验码功能
May 27 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设计模式  Command(命令模式)
2011/06/17 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python uuid模块使用实例
2015/04/08 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
详解python中的lambda与sorted函数
2020/09/04 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
Linux操作面试题
2012/05/16 面试题
城市规划毕业生求职信
2013/10/10 职场文书
高校毕业生登记表自我鉴定
2013/11/03 职场文书
保险经纪人求职信
2014/03/11 职场文书
小学生评语集锦
2014/04/18 职场文书
应届毕业生自荐书
2014/06/18 职场文书
五一促销活动总结
2014/07/01 职场文书
会计岗位说明书
2014/07/29 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书