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 相关文章推荐
html5的自定义data-*属性和jquery的data()方法的使用示例
Aug 21 Javascript
js字符串转成JSON
Nov 07 Javascript
jquery实现页面图片等比例放大缩小功能
Feb 12 Javascript
利用原生JS与jQuery实现数字线性变化的动画
Feb 24 Javascript
vue使用Axios做ajax请求详解
Jun 07 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
Mar 07 Javascript
详解vue的diff算法原理
May 20 Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 Javascript
微信小程序图片自适应实现解析
Jan 21 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 Javascript
JSON stringify方法原理及实例解析
Oct 23 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
模仿OSO的论坛(三)
2006/10/09 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
php算法实例分享
2015/07/14 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
jquery实现的图片点击滚动效果
2014/04/29 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
python实现人人网登录示例分享
2014/01/19 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
python与php实现分割文件代码
2017/03/06 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
HTML5的革新 结构之美
2011/06/20 HTML / CSS
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
Python面试题集
2012/03/08 面试题
英语教师岗位职责
2014/03/16 职场文书
小学生环保演讲稿
2014/04/25 职场文书
授权委托书(完整版)
2014/09/10 职场文书
大学生毕业评语
2014/12/31 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server