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 相关文章推荐
Javascript 判断 object 的特定类转载
Feb 01 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
Jan 15 Javascript
ztree获取当前选中节点子节点id集合的方法
Feb 12 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
Jun 19 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
Aug 17 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
Mar 06 jQuery
React优化子组件render的使用
May 12 Javascript
vue子路由跳转实现tab选项卡
Jul 24 Javascript
vue中使用vue-pdf的方法详解
Sep 05 Javascript
JavaScript async/await原理及实例解析
Dec 02 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 数组实例说明
2008/08/18 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
php 团购折扣计算公式
2011/11/24 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
Python break语句详解
2014/03/11 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
python版大富翁源代码分享
2018/11/19 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
群胜软件Java笔试题
2012/09/29 面试题
优秀中专生推荐信
2013/11/17 职场文书
机房搬迁方案
2014/05/01 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
小班上学期个人总结
2015/02/12 职场文书