温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用JavaScript怎么实现哈希表

发布时间:2021-06-02 16:54:38 来源:亿速云 阅读:207 作者:Leah 栏目:web开发

本篇文章为大家展示了使用JavaScript怎么实现哈希表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

属性的枚举:

var person = {   name: "zzw",   sex: "Male",   age: 21 }; for (var prop in person) {   console.log(prop + " ",person[prop]); }

输出:

使用JavaScript怎么实现哈希表

即对于对象而言,我们可以使用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 来删除,并且会有一个返回值。 如下:

使用JavaScript怎么实现哈希表

注意: 一般只有对象的属性才可以删除,而变量是不能删除的,如:

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>

上述内容就是使用JavaScript怎么实现哈希表,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI