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 相关文章推荐
Javascript无阻塞加载具体方式
Jun 28 Javascript
javascript实现多级联动下拉菜单的方法
Feb 06 Javascript
ajax读取数据后使用jqchart显示图表的方法
Jun 10 Javascript
学习javascript文件加载优化
Feb 19 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
Vue.js自定义指令的用法与实例解析
Jan 18 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
微信小程序之滚动视图容器的实现方法
Sep 26 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
Jan 07 Javascript
React 组件中的 bind(this)示例代码
Sep 16 Javascript
Vue3不支持Filters过滤器的问题
Sep 24 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编程开发“虚拟域名”系统
2006/10/09 PHP
php仿ZOL分页类代码
2008/10/02 PHP
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
10条php编程小技巧
2015/07/07 PHP
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Python3 处理JSON的实例详解
2017/10/29 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
信息系统专业个人求职信范文
2013/12/07 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
《赶海》教学反思
2014/04/20 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
上诉状格式
2015/05/23 职场文书
庆祝教师节主持词
2015/07/06 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python