js 模拟实现类似c#下的hashtable的简单功能代码


Posted in Javascript onJanuary 24, 2010

如果在c#中,我们只要用hashtable或者dictionary根据key取value的特性,就可以很轻松地实现这个功能了。其实我们稍作处理,js也可以实现类似hashtable的功能。下面总结一下笔者开发中用到的实现方式,贴代码为主。
1、实现思路:主要就是利用原型(prototype)的hasOwnProperty方法,确定对象中的项是该添加、移除还是取出某个匹配的项等。hasOwnProperty比遍历数组取值灵巧快速的地方在于:至少从代码上来看,它是O(1)复杂度的。
2、实现代码

// js哈希表 
function HashTable() { 
this.ObjArr = {}; 
this.Count = 0; 
//添加 
this.Add = function(key, value) { 
if (this.ObjArr.hasOwnProperty(key)) { 
return false; //如果键已经存在,不添加 
} 
else { 
this.ObjArr[key] = value; 
this.Count++; 
return true; 
} 
} 
//是否包含某项 
this.Contains = function(key) { 
return this.ObjArr.hasOwnProperty(key); 
} 
//取某一项 其实等价于this.ObjArr[key] 
this.GetValue = function(key) { 
if (this.Contains(key)) { 
return this.ObjArr[key]; 
} 
else { 
throw Error("Hashtable not cotains the key: " + String(key)); //脚本错误 
//return; 
} 
} 
//移除 
this.Remove = function(key) { 
if (this.Contains(key)) { 
delete this.ObjArr[key]; 
this.Count--; 
} 
} 
//清空 
this.Clear = function() { 
this.ObjArr = {}; this.Count = 0; 
} 
}

3、测试代码
代码
//员工 
function employee(id, userName) { 
this.id = id; 
this.userName = userName; 
} 
function test() { 
var ht = new HashTable(); 
var tmpEmployee = null; 
for (var i = 1; i < 6; i++) { 
tmpEmployee = new employee(i, "Employee_" + i); 
ht.Add(i, tmpEmployee); 
} 
for (var i = 1; i <= ht.Count; i++) { 
alert(ht.GetValue(i).userName); //其实等价于ht.ObjArr[i].userName 
//alert(ht.ObjArr[i].userName); 
} 
ht.Remove(1); 
alert(ht.Contains(1)); //false 
alert(ht.Contains(2)); //true 
//alert(ht.GetValue(1)); //异常 
var result = ht.GetValue(2); 
if (result != null) { 
alert("Employee Id:" + result.id + ";UserName:" + result.userName); 
} 
ht.Add(2, "这一个key已经存在!"); //Add无效 
//ht.Clear(); //清空 
alert(ht.Count); 
}

调用的时候很简单,只要new一个hashtable对象,常见的功能就都有了。是不是很简单?Enjoy it。
小结:原型链(prototype链)和作用域链是js的两个最核心的部分。学懂并悟透它们,许多复杂问题都会迎刃而解;好好利用它们的特性,我们可以轻松实现非常灵活高效的功能。
Javascript 相关文章推荐
IE之动态添加DOM节点触发window.resize事件
Jul 27 Javascript
读jQuery之八 包装事件对象
Jun 21 Javascript
js实现简单鼠标跟随效果的方法
Apr 10 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
May 25 Javascript
jQuery Chart图表制作组件Highcharts用法详解
Jun 01 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
Dec 26 Javascript
node.js实现登录注册页面
Apr 08 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
Jun 04 Javascript
Angular.JS中select下拉框设置value的方法
Jun 20 Javascript
JS实现的按钮点击颜色切换功能示例
Oct 19 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
Apr 25 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
Jan 24 #Javascript
优化javascript的执行速度
Jan 23 #Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
Jan 23 #Javascript
JQuery 1.4 中的Ajax问题
Jan 23 #Javascript
用JS写的一个TableView控件代码
Jan 23 #Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 #Javascript
JavaScript 学习笔记(十四) 正则表达式
Jan 22 #Javascript
You might like
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
给ECShop添加最新评论
2015/01/07 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
postman传递当前时间戳实例详解
2019/09/14 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
python regex库实例用法总结
2021/01/03 Python
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
师范生自荐信范文
2013/10/06 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书