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实现控制台控件的代码
Sep 04 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
JS脚本defer的作用示例介绍
Jan 02 Javascript
JS创建自定义表格具体实现
Feb 11 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
Bootstrap 布局组件(全)
Jul 18 Javascript
JavaScript中的await/async的作用和用法
Oct 31 Javascript
原生JS简单实现ajax的方法示例
Nov 29 Javascript
微信小程序 首页制作简单实例
Apr 07 Javascript
protractor的安装与基本使用教程
Jul 07 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 Javascript
js canvas实现五子棋小游戏
Jan 22 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开发者事半功倍的十大技巧小结
2010/04/20 PHP
php 邮件发送问题解决
2014/03/22 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
浅谈PHP的反射机制
2016/12/15 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
js word表格动态添加代码
2010/06/07 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
vue实现在线学生录入系统
2020/05/30 Javascript
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
计算机专业自荐信
2013/10/14 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
初二物理教学反思
2014/01/29 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
中学校庆方案
2014/03/17 职场文书
药店促销活动总结
2014/07/10 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
对讲机的最大通讯距离是多少
2022/02/18 无线电