js 模拟实现类似c#下的hashtable的简单功能代码_Javascript教程-查字典教程网
js 模拟实现类似c#下的hashtable的简单功能代码
js 模拟实现类似c#下的hashtable的简单功能代码
发布时间:2016-12-30 来源:查字典编辑
摘要:如果在c#中,我们只要用hashtable或者dictionary根据key取value的特性,就可以很轻松地实现这个功能了。其实我们稍作处...

如果在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教程学习
    热门Javascript教程学习
    编程开发子分类