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 相关文章推荐
使用JQUERY Tabs插件宿主IFRAMES
Jan 01 Javascript
JavaScript的21条基本知识点
Mar 04 Javascript
使用jQuery jqPlot插件绘制柱状图
Dec 18 Javascript
js原生实现FastClick事件的实例
Nov 20 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
基于jQuery实现咖啡订单管理简单应用
Feb 10 Javascript
js实现图片上传预览原理分析
Jul 13 Javascript
解决webpack无法通过IP地址访问localhost的问题
Feb 22 Javascript
vue中子组件的methods中获取到props中的值方法
Aug 27 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
Nov 04 Javascript
javascript Canvas动态粒子连线
Jan 01 Javascript
js实现简单的无缝轮播效果
Sep 05 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中使用接口实现工厂设计模式的代码
2012/06/17 PHP
php curl模拟post请求小实例
2013/11/13 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
python实现大文件分割与合并
2019/07/22 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
医学院校毕业生自荐信范文
2014/01/01 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技