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 学习第六课 实现一个Ajax的TreeView
May 17 Javascript
jQuery封装的tab选项卡插件分享
Jun 16 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
Jun 21 Javascript
JS访问DOM节点方法详解
Nov 29 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
axios向后台传递数组作为参数的方法
Aug 11 Javascript
vue中node_modules中第三方模块的修改使用详解
May 31 Javascript
Jquery实现获取子元素的方法分析
Aug 24 jQuery
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 Javascript
vue实现移动端input上传视频、音频
Aug 18 Javascript
微信小程序调用后台service教程详解
Nov 06 Javascript
基于vue+echarts数据可视化大屏展示的实现
Dec 25 Vue.js
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
SONY ICF-F10中波修复记
2021/03/02 无线电
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
php之字符串变相相减的代码
2007/03/19 PHP
php 缓存函数代码
2008/08/27 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
AJAX的使用方法详解
2017/04/29 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
JS如何生成动态列表
2020/09/22 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
python机器学习实战之树回归详解
2017/12/20 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
西部世纪.net笔试题面试题
2014/04/03 面试题
进程的查看和调度分别使用什么命令
2013/12/14 面试题
自考毕业生自我鉴定
2013/11/04 职场文书
董事长职责范文
2013/11/08 职场文书
护林防火标语
2014/06/27 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
学生党员检讨书范文
2014/12/27 职场文书
python基础之爬虫入门
2021/05/10 Python
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python