JavaScript 实现简易哈希表(HashTable)类
本文介绍如何在 JavaScript 中通过 Object 对象实现一个简易的哈希表(HashTable)类。该实现包含添加、删除、查找、计数和清空等核心功能,适用于简单的键值对存储场景。文章提供了完整的构造函数定义及常用方法的代码示例,帮助开发者理解基于对象属性的哈希表基本逻辑。
HashTable 类定义与实现
定义一个名为 Hashtable 的构造函数。
{
在构造函数内部,初始化一个名为 _hash 的属性,其值为一个新的 Object 实例,用于存储实际的键值对数据。
定义 add 方法,用于向哈希表中添加键值对。该方法接收 key 和 value 两个参数。
首先检查传入的 key 是否已定义(即不为 undefined)。如果 key 未定义,则操作无效。
在 key 存在的前提下,调用 contains 方法检查该 key 是否已存在于哈希表中。如果不存在(返回 false),则执行添加操作。
执行添加逻辑:将 value 赋值给 this._hash[key]。这里使用三元运算符处理 value 为 undefined 的情况,若 value 未定义则存储 null,否则存储原值。
如果添加成功(即 key 之前不存在),返回 true。
如果 key 已存在(contains 返回 true),则不执行添加操作,进入 else 分支。
当 key 已存在时,返回 false,表示添加失败。
}
如果初始检查发现 key 为 undefined,则直接返回 false,表示添加失败。
此处代码结构显示 add 方法结束的大括号缺失或错位,根据上下文逻辑,此处应为 add 方法结束后的下一个方法定义或类定义结束。结合后续代码,t11 是 remove 方法,因此 t9-t10 后的逻辑应闭合 add 方法。
}
}
定义 remove 方法,接收 key 参数。通过 delete 操作符从 this._hash 对象中删除指定的 key 及其对应的值。
this.count = function(){var i=0;for(var k in this._hash){i++;} return i;}
定义 items 方法,接收 key 参数。该方法直接返回 this._hash 中对应 key 的值。注意:若 key 不存在,将返回 undefined。
定义 contains 方法,接收 key 参数。通过检查 this._hash[key] 的类型是否为 undefined 来判断 key 是否存在。如果类型不是 undefined,则返回 true,否则返回 false。
定义 clear 方法,用于清空哈希表。通过遍历 this._hash 对象的所有属性,并逐个使用 delete 操作符删除它们,从而实现清空效果。
}
HashTable 使用示例
创建一个 Hashtable 类的实例,赋值给变量 a。
调用 a 的 add 方法,添加键 "aa"。由于未提供 value 参数,根据 add 方法的逻辑,其值将被存储为 null。
调用 a 的 add 方法,添加键 "bb",值为 2342。
再次调用 a 的 add 方法,添加键 "bb",值为 2342。由于 key "bb" 已存在,根据 add 方法的逻辑,此操作将返回 false,且数据不会重复或覆盖(取决于具体实现意图,此处逻辑是阻止重复添加)。
调用 a 的 remove 方法,移除键 "aa" 及其对应的值。
调用 a 的 count 方法,获取当前哈希表中的元素数量,并通过 alert 弹窗显示。此时表中应仅剩 "bb" 一个元素(假设 t19 未成功添加)。
调用 a 的 contains 方法,检查键 "bb" 是否存在,并通过 alert 弹窗显示结果。预期结果为 true。
调用 a 的 contains 方法,检查键 "aa" 是否存在,并通过 alert 弹窗显示结果。由于 t20 已移除 "aa",预期结果为 false。
调用 a 的 items 方法,获取键 "bb" 对应的值,并通过 alert 弹窗显示。预期结果为 2342。
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
