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重写alert方法的实例代码
Mar 29 Javascript
Js,alert出现乱码问题的解决方法
Jun 19 Javascript
js 上下左右键控制焦点(示例代码)
Dec 14 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
Sep 25 Javascript
jQuery中:hidden选择器用法实例
Dec 30 Javascript
JavaScript中的函数模式详解
Feb 11 Javascript
JQuery标签页效果的两个实例讲解(4)
Sep 17 Javascript
vue.js指令v-model实现方法
Dec 05 Javascript
原生JS下拉加载插件分享
Dec 26 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
Jun 12 jQuery
详解element-ui日期时间选择器的日期格式化问题
Apr 08 Javascript
vant中的toast轻提示实现代码
Nov 04 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进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
php上传excel表格并获取数据
2017/04/27 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
JavaScript生成一个不重复的ID的方法示例
2019/09/16 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
机器学习10大经典算法详解
2017/12/07 Python
Python正则表达式指南 推荐
2018/10/09 Python
python Tkinter的图片刷新实例
2019/06/14 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
一年级班主任寄语
2014/01/19 职场文书
学生会主席演讲稿
2014/04/25 职场文书
说明书范文
2014/05/07 职场文书
临床医学专业求职信
2014/08/08 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
代理词怎么写
2015/05/25 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
python 如何执行控制台命令与操作剪切板
2021/05/20 Python