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+css 图片自动缩放自适应大小
Aug 08 Javascript
DOM基础教程之模型中的模型节点
Jan 19 Javascript
Jquery实现仿京东商城省市联动菜单
Nov 19 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
Dec 02 Javascript
轻松掌握JavaScript状态模式
Sep 07 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
Jan 21 Javascript
canvas绘制一个常用的emoji表情
Mar 30 Javascript
手把手搭建安装基于windows的Vue.js运行环境
Jun 12 Javascript
vue2.0+koa2+mongodb实现注册登录
Apr 10 Javascript
生成无限制的微信小程序码的示例代码
Sep 20 Javascript
vue3.0 加载json的方法(非ajax)
Oct 26 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-MySQL教程归纳总结
2008/06/07 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
Vue底层实现原理总结
2018/02/17 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python中optparse模块使用浅析
2015/01/01 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
Python 下载及安装详细步骤
2019/11/04 Python
Python tkinter模版代码实例
2020/02/05 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
德国团购网站:Groupon德国
2018/03/13 全球购物
个人授权委托书范文
2014/09/21 职场文书
迟到检讨书范文
2015/01/27 职场文书
初中毕业生自我评价
2015/03/02 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle