javascript hashtable实现代码


Posted in Javascript onOctober 13, 2009
var arr = new Array(); 
arr['item1'] = 'the value of item 1 '; 
arr['item2'] = 'the value of item 2 '; 
alert(arr['item1']); 
alert(arr['item2']);

但上述功能,不符我们的实际要求,另外查询遍历也不方便,我们需要在Array的基础上进行扩展,
下面我们可以用js中的数组来实现类似的hashtable的功能,
function Hashtable(){ 
this.clear = hashtable_clear; 
this.containsKey = hashtable_containsKey; 
this.containsValue = hashtable_containsValue; 
this.get = hashtable_get; 
this.isEmpty = hashtable_isEmpty; 
this.keys = hashtable_keys; 
this.put = hashtable_put; 
this.remove = hashtable_remove; 
this.size = hashtable_size; 
this.toString = hashtable_toString; 
this.values = hashtable_values; 
this.hashtable = new Array(); 
} 
function hashtable_clear(){ 
this.hashtable = new Array(); 
} 
function hashtable_containsKey(key){ 
var exists = false; 
for (var i in this.hashtable) { 
if (i == key && this.hashtable[i] != null) { 
exists = true; 
break; 
} 
} 
return exists; 
} 
function hashtable_containsValue(value){ 
var contains = false; 
if (value != null) { 
for (var i in this.hashtable) { 
if (this.hashtable[i] == value) { 
contains = true; 
break; 
} 
} 
} 
return contains; 
} 
function hashtable_get(key){ 
return this.hashtable[key]; 
} 
function hashtable_isEmpty(){ 
return (this.size == 0) ? true : false; 
} 
function hashtable_keys(){ 
var keys = new Array(); 
for (var i in this.hashtable) { 
if (this.hashtable[i] != null) 
keys.push(i); 
} 
return keys; 
} 
function hashtable_put(key, value){ 
if (key == null || value == null) { 
throw 'NullPointerException {' + key + '},{' + value + '}'; 
}else{ 
this.hashtable[key] = value; 
} 
} 
function hashtable_remove(key){ 
var rtn = this.hashtable[key]; 
//this.hashtable[key] =null; 
this.hashtable.splice(key,1); 
return rtn; 
} 
function hashtable_size(){ 
var size = 0; 
for (var i in this.hashtable) { 
if (this.hashtable[i] != null) 
size ++; 
} 
return size; 
} 
function hashtable_toString(){ 
var result = ''; 
for (var i in this.hashtable) 
{ 
if (this.hashtable[i] != null) 
result += '{' + i + '},{' + this.hashtable[i] + '}\n'; 
} 
return result; 
} 
function hashtable_values(){ 
var values = new Array(); 
for (var i in this.hashtable) { 
if (this.hashtable[i] != null) 
values.push(this.hashtable[i]); 
} 
return values; 
}

Hastable类使用方法:
//实例化一个自定义的哈希表类 
var hashTable = new Hashtable(); 
hashTable.put(0,'abc'); //0为key, 'abc'为value 
hashTable.put(1,'123'); 
hashTable.put(2,'88a'); 
hashTable.put(3,'88a'); 
//遍历hashtable, 相当于c#和java中的foreach 
for (var key in hashTable.keys()){ /* 用keys方法 */ 
alert(hashTable.get(key)); //按key遍历value 
} 
//遍历hashtable, 相当于c#和java中的foreach 
for (var key in hashTable.hashtable)){ /* 用hashtable属性 */ 
alert(hashTable.get(key)); //按key遍历value 
} 
alert(hashTable.containsKey(1)); //返回true 
alert(hashTable.containsKey(4)); //因为不存在key为4的,返回false 
alert(hashTable.containsValue('888')); //返回true 
alert(hashTable.containsValue('mobidogs')); //因为不存在value为'mobidogs'的,返回false 
hashTable.remove(1); //移除key为1的元素 
alert(hashTable.containsKey(1)); //因为key为1的元素已被上行的reomve()方法移除,所以返回false 
//关于hastable的其它方法使用简单,读者可以自己测试 (此略)
Javascript 相关文章推荐
基于jquery的滚动新闻列表
Jun 19 Javascript
清除div下面的所有标签的方法
Feb 17 Javascript
jQuery多项选项卡的实现思路附样式及代码
Jun 03 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
Sep 01 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
Oct 26 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
vue2 全局变量的设置方法
Mar 09 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
Javascript作用域和作用域链原理解析
Mar 03 Javascript
node创建Vue项目步骤详解
Mar 06 Javascript
JavaScript 核心参考教程 内置对象
Oct 13 #Javascript
jQuery Ajax之load()方法
Oct 12 #Javascript
jQuery Ajax之$.get()方法和$.post()方法
Oct 12 #Javascript
JS 文件本身编码转换 图文教程
Oct 12 #Javascript
jQuery 行级解析读取XML文件(附源码)
Oct 12 #Javascript
jquery select选中的一个小问题
Oct 11 #Javascript
Jquery 表单取值赋值的一些基本操作
Oct 11 #Javascript
You might like
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
php 操作调试的方法
2012/07/12 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
Python实现在线程里运行scrapy的方法
2015/04/07 Python
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
毕业生找工作的自我评价
2013/10/18 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
Python数据类型最全知识总结
2021/05/31 Python
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL