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 相关文章推荐
Javascript的IE和Firefox兼容性汇编
Jul 01 Javascript
js中哈希表的几种用法总结
Jan 28 Javascript
jquery使用正则表达式验证email地址的方法
Jan 22 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
May 11 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
Apr 01 Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
Dec 07 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
Jan 03 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
May 02 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
May 16 Javascript
vue-cli设置publicPath小记
Apr 14 Javascript
vue 使用post/get 下载导出文件操作
Aug 07 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中的替代语法介绍
2015/01/09 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
document.write的几点使用心得
2014/05/14 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
Python 字符串操作方法大全
2014/03/11 Python
Python多线程编程简单介绍
2015/04/13 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
室内设计实习自我鉴定
2013/09/25 职场文书
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
考试没考好检讨书
2014/01/31 职场文书
大学生作弊检讨书
2014/09/11 职场文书
入党政审材料范文
2014/12/24 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
爱国主义主题班会
2015/08/14 职场文书
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript