这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了 js 实现 hashtable 的赋值、取值、遍历操作, 结合实例形式分析了哈希表的原理、哈希键值对操作相关技巧, 需要的朋友可以参考下
本文实例讲述了 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 键值对:
- HashtableObject.Add(key, value);
在哈希表中去除某个 key/value 键值对:
- HashtableObject.Remove(key);
从哈希表中移除所有元素:
- HashtableObject.Clear();
判断哈希表是否包含特定键 key:
- HashtableObject.Contains(key);
三、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# 语言里面的那样进行操作了。
还一个简单的变体版:
- // 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);
- }
最后解决一下,开头说的那个问题
- Array.prototype.maxNum = function() {
- var arr = this,
- obj = {};
- for (var i = 0,
- len = arr.length; i < len; i++) {
- var key = arr[i];
- if (!obj[key]) {
- obj[key] = 1;
- } else {
- obj[key]++;
- }
- }
- var max = -1,
- maxStr;
- for (key in obj) {
- if (obj[key] > max) {
- max = obj[key];
- maxStr = key;
- }
- }
- //alert(maxStr);
- return [maxStr, max];
- }
希望本文所述对大家 JavaScript 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0714/329186.html