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、Chrome、火狐
May 14 Javascript
JQuery给元素绑定click事件多次执行的解决方法
May 29 Javascript
Javascript中call与apply的学习笔记
Sep 22 Javascript
JavaScript淡入淡出渐变简单实例
Aug 06 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
Oct 29 Javascript
node.js cookie-parser之parser.js
Jun 06 Javascript
浅谈js的url解析函数封装
Jun 28 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
Jul 14 Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
微信小程序实现bindtap等事件传参
Apr 08 Javascript
Vue移动端项目实现使用手机预览调试操作
Jul 18 Javascript
JS中循环遍历数组的四种方式总结
Jan 23 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读取flv文件的播放时间长度
2009/09/03 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
javascript语言结构小记(一)
2011/09/10 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
python定时器(Timer)用法简单实例
2015/06/04 Python
破解安装Pycharm的方法
2018/10/19 Python
Python3 log10()函数简单用法
2019/02/19 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
python实现简单俄罗斯方块
2020/03/13 Python
如何学习Python time模块
2020/06/03 Python
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
美国眼镜网站:LensCrafters
2020/01/19 全球购物
个人函授自我鉴定
2014/03/25 职场文书
关爱残疾人标语
2014/06/25 职场文书
田径运动会通讯稿
2014/09/13 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
聘任书范文大全
2015/09/21 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python