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 相关文章推荐
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
Jul 21 Javascript
Prototype 学习 工具函数学习($方法)
Jul 12 Javascript
JavaScript的public、private和privileged模式
Dec 28 Javascript
javascript验证只能输入数字和一个小数点示例
Oct 21 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
May 25 Javascript
D3.js中data(), enter() 和 exit()的问题详解
Aug 17 Javascript
Javascript的动态增加类的实现方法
Oct 20 Javascript
easyui combobox开启搜索自动完成功能的实例代码
Nov 08 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
Oct 16 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
Dec 12 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
电力培训心得体会
2014/09/02 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
检讨书格式
2019/04/25 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers