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 相关文章推荐
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 Javascript
Prototype使用指南之range.js
Jan 10 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
Jun 20 Javascript
js 鼠标移动显示图片的简单实例
Dec 25 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
May 25 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
nginx+vue.js实现前后端分离的示例代码
Feb 12 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
Jun 27 Javascript
详解微信小程序实现WebSocket心跳重连
Jul 31 Javascript
React Hooks的深入理解与使用
Nov 12 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
Jun 04 Javascript
js实现简单点赞操作
Mar 17 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的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
用jquery来定位
2007/02/20 Javascript
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
JavaScript 调试器简介
2009/02/21 Javascript
js 表格隔行颜色
2009/12/02 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
javascript简易画板开发
2020/04/12 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
启动targetcli时遇到错误解决办法
2017/10/26 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
python入门教程之基本算术运算符
2020/11/13 Python
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
土木工程专业个人求职信
2013/12/30 职场文书
国窖1573广告词
2014/03/21 职场文书
优秀班组事迹材料
2014/12/24 职场文书
党小组意见范文
2015/06/08 职场文书