JS仿真实现哈希表及应用细�
本文描述了JS仿真实现哈希表及其应用。分享给大家参考,如下:
在算法中,尤其是数组算法中,哈希表的使用可以很好地解决这个问题,所以本文将记录一些js实现哈希表的例子,并给出一些解决实际问题的例子。
注意:本文并不是真正意义上的哈希表,但它类似于哈希表的使用。
第一部分:相关知识点
属性枚举:
var person={ name: 'zzw ',sex: ' Male ',age : 21 };for(var prop in person){ console . log(prop ' ',person[prop]);}输出:
也就是说,对于对象,我们可以在中使用for来枚举对象的属性。
删除属性:
var person={ name: 'zzw ',sex: ' Male ',age : 21 };var ifRemove=delete person.namefor(var prop in person){ console . log(prop ' ',person[prop]);} console . log(ifRemove);对象的属性可以通过删除来删除,并且会有一个返回值。如下所示:
注意:一般只能删除对象的属性,不能删除变量,如:
var x=1;console.log(删除x);此时,打印表输出false,因为变量无法删除。
检查属性是否存在:
var person={ name: 'zzw ',sex: ' Male ',age : 21 };console . log(' age ' in person);console . log(' somether ' in person);前者返回真,后者返回假。也就是说,我们可以在中使用来确定对象是否包含此属性。
属性添加:
var person={ name: 'zzw ',sex: ' Male ',age : 21 };person[' school ']=' XJTU ';console . log(person);添加属性非常简单,如上图,最终打印的对象包含学校属性。
第二部分:使用js实现哈希表
下面是构造函数得到的哈希表,使用时只需要实例化即可,下面的函数比较丰富,在实际问题中我们可以有选择的使用。
//创建构造函数hashtable函数hashtable(){//初始化哈希表中的记录数size var size=0;//创建一个对象来接受键值对var RES={ };//添加关键字,没有返回值这个。add=function (key,value){//判断哈希表中是否存在key,如果不存在,则大小加1,赋值if(!this . contain key(key)){ size;}//如果之前不存在,则赋值;覆盖以前存在的内容。res[key]=值;};//删除关键字,如果哈希表包含关键字,delete返回true,删除它,使大小减少1。这个。remove=function (key) {if (this。contain key(key)(delete RES[key]){ size-;} };//无论哈希表是否包含键,它都会返回一个布尔值。contain key=function(key){ return(RES中的键);};//如果哈希表包含值,则返回一个布尔值。contain value=function(value){//遍历对象中的属性值,判断是否等于给定值for(var prop in RES){ if(RES[prop]==value){ return true;} }返回false};//根据键获取值,并返回null this。getvalue=function(key){返回这个。containkey(密钥)?RES[key]: null;};//获取哈希表中的所有值,并返回一个数组。getallvalues=function(){ varvalues=[];for(var prop in RES){ values . push(RES[prop]);}返回值;};//根据值获取哈希表中的键,并返回null this。getkey=function(value){ for(var prop in RES){ if(RES[prop]==value){ return prop;} }//如果遍历结束没有返回,则返回null return null};//获取哈希表中的所有键并返回一个数组。getallkeys=function(){ varkeys=[];for(var prop in RES){ keys . push(prop);}回车键;};//获取哈希表中的记录数,并返回一个值。getsize=function(){ return size;};//清空哈希表,没有返回值this . clear=function(){ size=0;RES={ };};}第三部分:应用示例
问题:给定一个整数数组(无序),找出两个数,使其和为指定值,并返回这两个数的下标(数组下标从0开始),假设数组元素的值不同。
实施如下:
!DOCTYPE html html lang=' en ' head meta charset=' UTF-8 '标题哈希表的使用/标题/床头柜脚本函数queryIndex(arr,result){ var hashTable=new hashTable();var arrLength=arr . length var sub=[];for(var I=0;I arrlenhei){//扫描一遍,存储下标和值hashTable.add(i,arr[I]);} for(var j=0;j arrlengj){ if(hashtable。containvalue(结果-arr[j])结果!==2*arr[j]) { //获取两个下标,跳出循环子推送(j);var蒽index=Number(哈希表。getkey(result-arr[j]);子推送(蒽索引);打破;} } if(sub length!==0){ return sub;} else { return-1;} } console.log(queryIndex([1,5,7,3,8],15));//2,4 console.log(queryIndex([8,18,28,12,29,17],46));//2,4 console.log(queryIndex([8,18,28,12,29,17],2));//-1 //创建构造函数散列表函数哈希表(){ //初始化哈希表的记录条数size var size=0;//创建对象用于接受键值对var RES={ };//添加关键字,无返回值this.add=函数(键,值){ //判断哈希表中是否存在关键,若不存在,则大小加1,且赋值if(!这个。包含键(key)){ size;} //如果之前不存在,赋值;如果之前存在,覆盖res[key]=值;};//删除关键字,如果哈希表中包含关键,并且删除返回真实的则删除,并使得大小减1这个。remove=function(key){ if(this。包含键(key)(删除RES[key]){ size-;} };//哈希表中是否包含关键,返回一个布尔值这个。ContainKey=函数(键){ return(RES中的键);};//哈希表中是否包含价值,返回一个布尔值this.containValue=函数(值){ //遍历对象中的属性值,判断是否和给定价值相等for(var prop in RES){ if(RES[prop]==value){ return true;} }返回false };//根据键获取价值,如果不存在就返回空这个。getvalue=function(key){返回这个。包含密钥(key)?RES[key]:为空;};//获取哈希表中的所有价值,返回一个数组这个。GetAllValues=function(){ var values=[];for(var prop in RES){ values。推(RES[prop]);}返回值;};//根据值获取哈希表中的关键,如果不存在就返回空这个。GetKey=function(value){ for(var prop in RES){ if(RES[prop]==value){ return prop;} } //遍历结束没有返回,就返回空返回null};//获取哈希表中所有的关键,返回一个数组这个。GetAllKeys=function(){ var keys=[];for(var prop in RES){ key。推动(支撑);}回车键;};//获取哈希表中记录的条数,返回一个数值这个。getSize=function(){ return size;};//清空哈希表,无返回值这个。clear=function(){ size=0;RES={ };};}/脚本/正文/html在实际的使用过程中,我们可以先写出主要的功能,然后有需要再添加。
PS:这里再为大家提供几款混杂操作相关工具供大家参考使用:
在线散列/哈希算法加密工具:http://工具。JB 51。网络/密码/哈希_加密
在线MD5/哈希/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:http://工具。JB 51。net/密码/hash _ MD5 _ sha
更多关于Java脚本语言相关内容感兴趣的读者可查看本站专题: 《javascript编码操作技巧总结》 、 《JavaScript加密解密技巧汇总》 、 《JavaScript数学运算用法总结》 、 《JavaScript数据结构与算法技巧总结》 及《JavaScript错误与调试技巧总结》
希望本文所述对大家Java脚本语言程序设计有所帮助。
版权声明:JS仿真实现哈希表及应用细�是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。