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文件缓存的代码
Apr 09 Javascript
jquery等宽输出文字插件使用介绍
Sep 18 Javascript
jQuery获取上传文件的名称的正则表达式
May 21 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 Javascript
微信小程序 开发MAP(地图)实例详解
Jun 27 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
Apr 12 jQuery
JavaScript中变量提升与函数提升经典实例分析
Jul 26 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
Sep 26 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
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
图形数字验证代码
2006/10/09 PHP
十天学会php之第二天
2006/10/09 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
javascrip关于继承的小例子
2013/05/10 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
跟老齐学Python之复习if语句
2014/10/02 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
python实现各种插值法(数值分析)
2019/07/30 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
一份全面的PHP面试问题考卷
2012/07/15 面试题
介绍一下如何优化MySql
2016/12/20 面试题
机修工工作职责
2014/02/21 职场文书
写给老婆的检讨书
2014/02/21 职场文书
大一新生学期自我评价
2014/04/09 职场文书
先进工作者事迹材料
2014/12/23 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript