您好,欢迎访问一九零五行业门户网

JS做出哈希表功能

这次给大家带来js做出哈希表功能,js做出哈希表功能的注意事项有哪些,下面就是实战案例,一起来看一下。
在算法中,尤其是有关数组的算法中,哈希表的使用可以很好的解决问题,所以这篇文章会记录一些有关js实现哈希表并给出解决实际问题的例子。
说明: 这篇文章所写并不是真正意义的哈希表,只是与哈希表的使用有相似之处。
第一部分:相关知识点
属性的枚举:
var person = {   name: zzw,   sex: male,   age: 21 }; for (var prop in person) {   console.log(prop +  ,person[prop]); }
输出:
即对于对象而言,我们可以使用for in来枚举对象的属性。
属性的删除:
var person = {   name: zzw,   sex: male,   age: 21 }; var ifremove = delete person.name; for (var prop in person) {   console.log(prop +  ,person[prop]); } console.log(ifremove);
对象的属性可以通过 delete 来删除,并且会有一个返回值。 如下:
注意: 一般只有对象的属性才可以删除,而变量是不能删除的,如:
var x = 1; console.log(delete x);
这时打印台输出false,因为变量是不可被删除的。
检测属性是否存在:
var person = {   name: zzw,   sex: male,   age: 21 }; console.log(age in person); console.log(someother in person);
前者返回true,后者返回false。 即我们可以使用in来确定一个对象是否含有该属性。
属性的添加:
var person = {   name: zzw,   sex: male,   age: 21 }; person[school] = xjtu; console.log(person);
属性的添加非常简单,如上所示,最终打印出来的对象是包含 school 属性的。
第二部分: 使用js实现哈希表
下面是通过构造函数得到一个哈希表,在使用时只需实例化即可,且下面的功能较为丰富,在实际问题中,我们可以选择性的使用 。
// 创建构造函数hashtable function hashtable() {     // 初始化哈希表的记录条数size     var size = 0;     // 创建对象用于接受键值对     var res = {};     // 添加关键字,无返回值     this.add = function (key, value) {       //判断哈希表中是否存在key,若不存在,则size加1,且赋值       if (!this.containkey(key)) {         size++;       }       // 如果之前不存在,赋值; 如果之前存在,覆盖。       res[key] = value;     };     // 删除关键字, 如果哈希表中包含key,并且delete返回true则删除,并使得size减1     this.remove = function (key) {       if (this.containkey(key) && (delete res[key])) {         size--;       }     };     // 哈希表中是否包含key,返回一个布尔值     this.containkey = function (key) {       return (key in res);     };     // 哈希表中是否包含value,返回一个布尔值     this.containvalue = function (value) {       // 遍历对象中的属性值,判断是否和给定value相等       for (var prop in res) {         if (res[prop] === value) {           return true;         }       }       return false;     };     // 根据键获取value,如果不存在就返回null     this.getvalue = function (key) {       return this.containkey(key) ? res[key] : null;     };     // 获取哈希表中的所有value, 返回一个数组     this.getallvalues = function () {       var values = [];       for (var prop in res) {         values.push(res[prop]);       }       return values;     };     // 根据值获取哈希表中的key,如果不存在就返回null     this.getkey = function (value) {       for (var prop in res) {         if (res[prop] === value) {           return prop;         }       }       // 遍历结束没有return,就返回null       return null;     };     // 获取哈希表中所有的key,返回一个数组     this.getallkeys = function () {       var keys = [];       for (var prop in res) {         keys.push(prop);       }       return keys;     };     // 获取哈希表中记录的条数,返回一个数值     this.getsize = function () {       return size;     };     // 清空哈希表,无返回值     this.clear = function () {       size = 0;       res = {};     }; }
第三部分: 应用实例
问题:给定一个整型的数组(无序),找出其中的两个数使得其和为某个指定的值,并返回这两个数的下标(数组下标从0开始),假设数组元素的值各不相同。
实现如下:
<!doctype html> <html lang="en"> <head>   <meta charset="utf-8">   <title>哈希表的使用</title> </head> <body>   <script>   function queryindex(arr, result) {     var hashtable = new hashtable();     var arrlength = arr.length;     var sub = [];     for (var i = 0; i < arrlength; i++) { // 扫描一遍,存储下标和值 hashtable.add(i, arr[i]); } for (var j = 0; j < arrlength; j++) { if (hashtable.containvalue(result - arr[j]) && result !== 2*arr[j]) { // 获取两个下标,跳出循环 sub.push(j); var antherindex = number(hashtable.getkey(result - arr[j])); sub.push(antherindex); break; } } 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 // 创建构造函数hashtable function hashtable() { // 初始化哈希表的记录条数size var size = 0; // 创建对象用于接受键值对 var res = {}; // 添加关键字,无返回值 this.add = function (key, value) { //判断哈希表中是否存在key,若不存在,则size加1,且赋值 if (!this.containkey(key)) { size++; } // 如果之前不存在,赋值; 如果之前存在,覆盖。 res[key] = value; }; // 删除关键字, 如果哈希表中包含key,并且delete返回true则删除,并使得size减1 this.remove = function (key) { if (this.containkey(key) && (delete res[key])) { size--; } }; // 哈希表中是否包含key,返回一个布尔值 this.containkey = function (key) { return (key in res); }; // 哈希表中是否包含value,返回一个布尔值 this.containvalue = function (value) { // 遍历对象中的属性值,判断是否和给定value相等 for (var prop in res) { if (res[prop] === value) { return true; } } return false; }; // 根据键获取value,如果不存在就返回null this.getvalue = function (key) { return this.containkey(key) ? res[key] : null; }; // 获取哈希表中的所有value, 返回一个数组 this.getallvalues = function () { var values = []; for (var prop in res) { values.push(res[prop]); } return values; }; // 根据值获取哈希表中的key,如果不存在就返回null this.getkey = function (value) { for (var prop in res) { if (res[prop] === value) { return prop; } } // 遍历结束没有return,就返回null return null; }; // 获取哈希表中所有的key,返回一个数组 this.getallkeys = function () { var keys = []; for (var prop in res) { keys.push(prop); } return keys; }; // 获取哈希表中记录的条数,返回一个数值 this.getsize = function () { return size; }; // 清空哈希表,无返回值 this.clear = function () { size = 0; res = {}; }; } </script> </body> </html>
在实际的使用过程中,我们可以先写出主要的功能,然后有需要再添加。
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
js+css3实现鼠标与图片互动放大效果
根据jquery.i18n实现web前端国际化
以上就是js做出哈希表功能的详细内容。
其它类似信息

推荐信息