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时间验证和转换工具小例子
Jul 01 Javascript
jQuery中ajax和post处理json的不同示例对比
Nov 02 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 Javascript
基于BootStrap环境写jQuery tabs插件
Jul 12 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
Jun 13 Javascript
创建简单的node服务器实例(分享)
Jun 23 Javascript
JQuery选中select组件被选中的值方法
Mar 08 jQuery
JS实现可切换图片的幻灯切换效果示例
May 24 Javascript
vue+koa2实现session、token登陆状态验证的示例
Aug 30 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
Jan 22 Javascript
JS制作简易计算器的实例代码
Jul 04 Javascript
JS实现密码框效果
Sep 10 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 dirname()与__FILE__常量的应用
2013/06/24 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
python通过zabbix api获取主机
2018/09/17 Python
python实现抖音点赞功能
2019/04/07 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
应届毕业生求职信范例分享
2013/12/17 职场文书
工会趣味活动方案
2014/08/18 职场文书
简历自我评价模板
2015/03/11 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Flink 侧流输出源码示例解析
2022/09/23 Servers
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python