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 相关文章推荐
Js操作树节点自动折叠展开的几种方法
May 05 Javascript
js确认删除对话框适用于a标签及submit
Jul 10 Javascript
php,js,css字符串截取的办法集锦
Sep 26 Javascript
jQuery中extend函数详解
Feb 13 Javascript
JS Array.slice 截取数组的实现方法
Jan 02 Javascript
Node.js使用gm拼装sprite图片
Jul 04 Javascript
使用nvm管理不同版本的node与npm的方法
Oct 31 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
vue项目添加多页面配置的步骤详解
May 22 Javascript
如何在 ant 的table中实现图片的渲染操作
Oct 28 Javascript
小程序中手机号识别的示例
Dec 14 Javascript
QT与javascript交互数据的实现
May 26 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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
css图片自适应大小
2007/11/28 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
Python 列表理解及使用方法
2017/10/27 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python set集合使用方法解析
2019/11/05 Python
python支持多线程的爬虫实例
2019/12/21 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
百联网上商城:i百联
2017/01/28 全球购物
国际贸易个人求职信范文
2014/01/04 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
项目投资合作意向书
2014/07/29 职场文书
初级党校心得体会
2014/09/11 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
CSS 伪元素::marker详解
2021/06/26 HTML / CSS