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 相关文章推荐
随窗体滑动的小插件sticky源码
Jun 21 Javascript
js控制不同的时间段显示不同的css样式的实例代码
Nov 04 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
Dec 04 Javascript
通过url查找a元素并点击
Apr 09 Javascript
javascript截取字符串小结
Apr 28 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
Aug 28 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
Nov 24 Javascript
jQuery中判断对象是否存在的方法汇总
Feb 24 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 Javascript
vue mint-ui tabbar变组件使用
May 04 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
Sep 18 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 header下载函数
2014/01/31 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
在Django框架中编写Context处理器的方法
2015/07/20 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
python提取log文件内容并画出图表
2019/07/08 Python
python实现飞船大战
2020/04/24 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
基于Python实现天天酷跑功能
2021/01/06 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
校园门卫岗位职责
2013/12/09 职场文书
年会活动策划方案
2014/01/23 职场文书
《童年》教学反思
2014/02/18 职场文书
表决心的诗句大全
2014/03/11 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
先进单位申报材料
2014/12/25 职场文书
现役军人家属慰问信
2015/03/24 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技