js模拟实现类似c#下的hashtable的简单功能代码
2023-06-13 09:14:15 时间
如果在c#中,我们只要用hashtable或者dictionary根据key取value的特性,就可以很轻松地实现这个功能了。其实我们稍作处理,js也可以实现类似hashtable的功能。下面总结一下笔者开发中用到的实现方式,贴代码为主。
1、实现思路:主要就是利用原型(prototype)的hasOwnProperty方法,确定对象中的项是该添加、移除还是取出某个匹配的项等。hasOwnProperty比遍历数组取值灵巧快速的地方在于:至少从代码上来看,它是O(1)复杂度的。
2、实现代码
复制代码代码如下:
1、实现思路:主要就是利用原型(prototype)的hasOwnProperty方法,确定对象中的项是该添加、移除还是取出某个匹配的项等。hasOwnProperty比遍历数组取值灵巧快速的地方在于:至少从代码上来看,它是O(1)复杂度的。
2、实现代码
//js哈希表
functionHashTable(){
this.ObjArr={};
this.Count=0;
//添加
this.Add=function(key,value){
if(this.ObjArr.hasOwnProperty(key)){
returnfalse;//如果键已经存在,不添加
}
else{
this.ObjArr[key]=value;
this.Count++;
returntrue;
}
}
//是否包含某项
this.Contains=function(key){
returnthis.ObjArr.hasOwnProperty(key);
}
//取某一项其实等价于this.ObjArr[key]
this.GetValue=function(key){
if(this.Contains(key)){
returnthis.ObjArr[key];
}
else{
throwError("Hashtablenotcotainsthekey:"+String(key));//脚本错误
//return;
}
}
//移除
this.Remove=function(key){
if(this.Contains(key)){
deletethis.ObjArr[key];
this.Count--;
}
}
//清空
this.Clear=function(){
this.ObjArr={};this.Count=0;
}
}
3、测试代码
代码
//员工
functionemployee(id,userName){
this.id=id;
this.userName=userName;
}
functiontest(){
varht=newHashTable();
vartmpEmployee=null;
for(vari=1;i<6;i++){
tmpEmployee=newemployee(i,"Employee_"+i);
ht.Add(i,tmpEmployee);
}
for(vari=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));//异常
varresult=ht.GetValue(2);
if(result!=null){
alert("EmployeeId:"+result.id+";UserName:"+result.userName);
}
ht.Add(2,"这一个key已经存在!");//Add无效
//ht.Clear();//清空
alert(ht.Count);
}
调用的时候很简单,只要new一个hashtable对象,常见的功能就都有了。是不是很简单?Enjoyit。
小结:原型链(prototype链)和作用域链是js的两个最核心的部分。学懂并悟透它们,许多复杂问题都会迎刃而解;好好利用它们的特性,我们可以轻松实现非常灵活高效的功能。
相关文章
- 用JS获取地址栏url参数的方法_js的url是啥
- Js排序算法_js 排序算法
- c# mysql executenonquery_C#与数据库访问技术之ExecuteNonQuery方法
- C# 实现对网站Get与Post请求
- c# 多线程并发-金三银四面试:C#.NET面试题高级篇2-多线程
- 【JS 逆向百例】猿人学系列 web 比赛第二题:js 混淆 - 动态 cookie,详细剖析
- 原生 JS 实现 HTML 转 Markdown,以及其实现逻辑(html2md.js 或 html2markdown.js)
- clipboard.js:最轻便的复制页面内容到剪切板的JS
- 操作mysql的C#类详解数据库
- 使用JS在网页中连接Oracle数据库(js网页链接oracle)
- JavaScript探索之旅掌握Oracle和JS的完美融合(js与oracle)
- C#Stream和byte[]之间的转换
- c#中的实现php中的preg_replace
- js对象之JS入门之Array对象操作小结
- C#汉字转化拼音的简单实例代码
- 解析c#在未出现异常情况下查看当前调用堆栈的解决方法
- C#委托初级使用的实例代码
- 解析C#中如何把控件的边框角画为圆弧
- C#正则表达式分解和转换IP地址实例(C#正则表达式大全c#正则表达式语法)
- c#获取存储过程返回值示例分享
- C#实现treeview绑定的方法
- C#中DataGridView操作技巧
- C#常用GDI+文字操作汇总