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得到网页中所有的div的id
Oct 19 Javascript
js将控件隐藏的方法及display属性介绍
Jul 04 Javascript
JavaScript中的ubound函数使用实例
Nov 04 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
Mar 30 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
Jul 18 Javascript
Validform表单验证总结篇
Oct 31 Javascript
js放到head中失效的原因与解决方法
Mar 07 Javascript
Vue computed计算属性的使用方法
Jul 14 Javascript
easyui简介_动力节点Java学院整理
Jul 14 Javascript
vue.js数据绑定操作详解
Apr 23 Javascript
vue-cli中使用高德地图的方法示例
Mar 28 Javascript
js通过循环多张图片实现动画效果
Dec 19 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中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
Javascript实现的分页函数
2006/12/22 Javascript
一个用js实现控制台控件的代码
2007/09/04 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
python实现xml转json文件的示例代码
2020/12/30 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
高中学生评语大全
2014/04/25 职场文书
公司募捐倡议书
2014/05/14 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
学生评语集锦
2015/01/04 职场文书
表扬稿范文
2015/01/17 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
python实现简单反弹球游戏
2021/04/12 Python