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/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
Jul 14 Javascript
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
Jquery 扩展方法
May 06 Javascript
js报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
JS判断不能为空实例代码
Nov 26 Javascript
使用ajax+jqtransform实现动态加载select
Dec 01 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
Dec 08 Javascript
基于javascript数组实现图片轮播
May 02 Javascript
javascript 动态脚本添加的简单方法
Oct 11 Javascript
详解js的六大数据类型
Dec 27 Javascript
简述vue中的config配置
Jan 23 Javascript
详解vue axios用post提交的数据格式
Aug 07 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网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
基层党员对照检查材料
2014/09/24 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
单独二胎证明
2015/06/24 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
反邪教教育心得体会
2016/01/15 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
OpenCV-Python实现油画效果的实例
2021/06/08 Python
python基于turtle绘制几何图形
2021/06/15 Python