本文实例讲述了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.ma
xnum = function(){
var arr = this,obj={};
for(var i =0,len=arr.length;i
max){
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程序设计有所帮助。