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获取tr中控件值并操作tr实现思路
Mar 27 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
Nov 13 Javascript
js获取下拉列表的值和元素个数示例
May 07 Javascript
Javascript中的Callback方法浅析
Mar 15 Javascript
javascript创建cookie、读取cookie
Mar 31 Javascript
js+css实现红包雨效果
Jul 12 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
Aug 25 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
Apr 16 Javascript
javascript实现blob加密视频源地址的方法
Aug 08 Javascript
解决 window.onload 被覆盖的问题方法
Jan 14 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 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 网页过期时间的控制代码
2009/06/29 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
jquery 学习之二 属性相关
2010/11/23 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
在线课程:Skillshare
2019/04/02 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
单位领导证婚词
2014/01/14 职场文书
个人培训总结
2015/03/05 职场文书
学校中秋节活动总结
2015/03/23 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
Python OpenCV实现图形检测示例详解
2022/04/08 Python