源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-07-09 04:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:js 模拟实现类似c#下的hashtable的简单功能代码
如果在c#中,我们只要用hashtable或者dictionary根据key取value的特性,就可以很轻松地实现这个功能了。其实我们稍作处理,js也可以实现类似hashtable的功能。下面总结一下笔者开发中用到的实现方式,贴代码为主。 1、实现思路:主要就是利用原型(prototype)的hasOwnProperty方法,确定对象中的项是该添加、移除还是取出某个匹配的项等。hasOwnProperty比遍历数组取值灵巧快速的地方在于:至少从代码上来看,它是O(1)复杂度的。 2、实现代码
[u]复制代码[/u] 代码如下:
// 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、测试代码 代码
[u]复制代码[/u] 代码如下:
//员工 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的两个最核心的部分。学懂并悟透它们,许多复杂问题都会迎刃而解;好好利用它们的特性,我们可以轻松实现非常灵活高效的功能。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部