js实现hashtable的赋值、取值、遍历操作实例详解


Posted in Javascript onDecember 25, 2016

本文实例讲述了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键值对。

js实现hashtable的赋值、取值、遍历操作实例详解

二、哈希表的简单操作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 相关文章推荐
js 面向对象的技术创建高级 Web 应用程序
Feb 25 Javascript
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
AngularJS中处理多个promise的方式
Feb 02 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
May 04 Javascript
Angularjs 制作购物车功能实例代码
Sep 14 Javascript
JS实现针对给定时间的倒计时功能示例
Apr 11 Javascript
js实现单张图片平移切换效果
Oct 11 Javascript
angular中ui calendar的一些使用心得(推荐)
Nov 03 Javascript
彻底理解js面向对象之继承
Feb 04 Javascript
JS动画实现回调地狱promise的实例代码详解
Nov 08 Javascript
微信小程序实现文件、图片上传功能
Aug 18 Javascript
JavaScript this关键字指向常用情况解析
Sep 02 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
Dec 25 #Javascript
AngularJS入门教程之Helloworld示例
Dec 25 #Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 #Javascript
AngularJS打开页面隐藏显示表达式用法示例
Dec 25 #Javascript
AngularJS开发教程之控制器之间的通信方法分析
Dec 25 #Javascript
使用jsonp实现跨域获取数据实例讲解
Dec 25 #Javascript
JavaScript中数据类型转换总结
Dec 25 #Javascript
You might like
如何使用PHP中的字符串函数
2006/11/24 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
JS 分号引起的一段调试问题
2009/06/18 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
python下读取公私钥做加解密实例详解
2017/03/29 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
简述Python2与Python3的不同点
2018/01/21 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
Python程序慢的重要原因
2020/09/04 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
英国健身超市:Fitness Superstore
2019/06/17 全球购物
运动会拉拉队口号
2014/06/09 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL