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 1.2.x 升? 1.3.x 注意事项
May 06 Javascript
动态表格Table类的实现
Aug 26 Javascript
javascript基础知识大集锦(二) 推荐收藏
Jan 13 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
Mar 28 Javascript
asp.net 30分钟掌握无刷新 Repeater
Sep 16 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
May 30 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
Aug 30 Javascript
js中cookie的添加、取值、删除示例代码
Oct 21 Javascript
简介JavaScript中的sub()方法的使用
Jun 08 Javascript
layui 表单标签的校验方法
Sep 04 Javascript
在vue+element ui框架里实现lodash的debounce防抖
Nov 13 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
php根据日期判断星座的函数分享
2014/02/13 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
基于pip install django失败时的解决方法
2018/06/12 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
应聘教师自荐信
2013/10/12 职场文书
中专生的个人自我评价
2013/12/11 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
年终总结会议主持词
2014/03/17 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
优秀员工推荐材料
2014/12/20 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书