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

发布时间 - 2026-01-10 22:05:35    点击率:

本文实例讲述了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];
}

PS:这里再为大家提供几款hash操作相关工具供大家参考使用:

在线散列/哈希算法加密工具:
http://tools./password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools./password/hash_md5_sha

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# js  # hashtable  # 赋值  # 取值  # 遍历  # js中哈希表的几种用法总结  # javascript 哈希表(hashtable)的简单实现  # JavaScript中实现键值对应的字典与哈希表结构的示例  # js实现HashTable(哈希表)的实例分析  # javascript实现获取字符串hash值  # 浅谈js多维数组和hash数组定义和使用  # javascript hashtable实现代码  # js数组去重的hash方法  # js模拟hashtable的简单实例  # JS模拟实现哈希表及应用详解  # 键值  # 移除  # 清空  # 加密工具  # 这一  # 相关内容  # 最多  # 均为  # 感兴趣  # 数据结构  # 作了  # 给大家  # 要用  # 能有  # 使我  # 更多关于  # 所述  # 几款  # 程序设计 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python自动化办公教程_ExcelWordPDF批量处理案例  Bootstrap整体框架之JavaScript插件架构  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  简单实现Android验证码  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何在自有机房高效搭建专业网站?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel如何为API生成Swagger或OpenAPI文档  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何在腾讯云服务器快速搭建个人网站?  如何快速搭建个人网站并优化SEO?  WEB开发之注册页面验证码倒计时代码的实现  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  用yum安装MySQLdb模块的步骤方法  用v-html解决Vue.js渲染中html标签不被解析的问题  如何快速搭建高效简练网站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Java遍历集合的三种方式  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  制作旅游网站html,怎样注册旅游网站?  Java类加载基本过程详细介绍  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  如何在 Pandas 中基于一列条件计算另一列的分组均值  海南网站制作公司有哪些,海口网是哪家的?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  简历在线制作网站免费版,如何创建个人简历?  开心动漫网站制作软件下载,十分开心动画为何停播?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  如何有效防御Web建站篡改攻击?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  智能起名网站制作软件有哪些,制作logo的软件?  html5的keygen标签为什么废弃_替代方案说明【解答】  Windows Hello人脸识别突然无法使用  如何在云主机上快速搭建多站点网站?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  如何用美橙互联一键搭建多站合一网站?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  SQL查询语句优化的实用方法总结  如何挑选优质建站一级代理提升网站排名?