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 相关文章推荐
[JS源码]超长文章自动分页(客户端版)
Jan 09 Javascript
javascript dom代码应用 简单的相册[firefox only]
Jun 12 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
关于jQuery object and DOM element
Apr 15 Javascript
js添加select下默认的option的value和text的方法
Oct 19 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
Mar 04 Javascript
jquery插件hiAlert实现网页对话框美化
May 03 Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
Nov 22 Javascript
JavaScript 高性能数组去重的方法
Sep 20 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
Aug 20 Javascript
Vue + ts实现轮播插件的示例
Nov 10 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
第十一节--重载
2006/11/16 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
php图像验证码生成代码
2017/06/08 PHP
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
document.createElement()用法
2013/03/13 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
Python中functools模块的常用函数解析
2016/06/30 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
解决Django中多条件查询的问题
2019/07/18 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python怎么自定义捕获错误
2020/06/29 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
Shell如何接收变量输入
2016/08/06 面试题
家具促销活动方案
2014/02/16 职场文书
合作投资意向书
2014/04/01 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
创先争优一句话承诺
2014/05/29 职场文书
卫生院健康教育实施方案
2014/06/07 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers