js实现hashtable的赋值、取值、遍历操作实例详解

本文实例讲述了js实现hashtable的赋值、取值、遍历操作。分享给大家供大家参考,具体如下:

哈希表(Hashtable)这个概率应该是#c里面的概念,用来赋值、取值、遍历、排序操作提高效率。想起这个东西其实使我们以前经常遇到这样的面试题,一个很大的数组可能有100000个,如何快速知道它里面的出现最多的次数,那么这里我们可能就要用Hashtable的相关知识了。Javascript中,object的实现就是hash表,因此只要在object上封装点方法,再利用原生的hasOwnProperty方法就可以实现简单高效的hashtable。

一、什么是哈希表(Hashtable)

二、哈希表的简单操作

三、js模拟哈希表的简单操作

一、什么是哈希表(Hashtable)

Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对。

二、哈希表的简单操作C#

在哈希表中添加一个key/value键值对:

rush:js;"> HashtableObject.Add(key,value);

在哈希表中去除某个key/value键值对:

rush:js;"> HashtableObject.Remove(key);

从哈希表中移除所有元素:

rush:js;"> HashtableObject.Clear();

判断哈希表是否包含特定键key:

rush:js;"> HashtableObject.Contains(key);

三、js模拟哈希表的简单操作

rush:js;"> HashTable.prototype = { contructor:HashTable,//初始化 initialize:function(){ this.obj = {}; },//获取hashTable中对象唯一出现的次数 count:function(){ var count = 0; for(var i in this.content) count++; return count; },//返回hashTable中的值 items:function(key){ if(this.contains(key)){ return this.obj[key]; } },//增加值到hashtable add:function(key,value){ if(this.obj.hasOwnProperty(key)){ return false; }else{ this.obj[key] = value; return true; } },//清空hashtable中的值 clear:function(){ this.obj = {}; },//检测hashTable对象中是否含有此属性 contains:function(key){ return this.obj.hasOwnProperty(key); },//移除hashTable中对象的值 remove:function(key){ delete this.obj[key]; } }

这样我们就能像c#语言里面的那样进行操作了。

一个简单的变体版:

rush:js;"> // 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; } } //员工 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); }

最后解决一下,开头说的那个问题

rush:js;"> Array.prototype.maxnum = function(){ var arr = this,obj={}; for(var i =0,len=arr.length;imax){ max = obj[key]; maxStr = key; } } //alert(maxStr); return [maxStr,max]; }

PS:这里再为大家提供几款hash操作相关工具供大家参考使用:

在线散列/哈希算法加密工具:

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...