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 鼠标拖动对象 可让任何div实现拖动效果
Nov 09 Javascript
jquery中实现标签切换效果的代码
Mar 01 Javascript
jquery实现倒计时功能
Dec 28 Javascript
jquery实现网页定位导航
Aug 23 Javascript
jQuery源码分析之sizzle选择器详解
Feb 13 Javascript
Angular.JS中select下拉框设置value的方法
Jun 20 Javascript
使用vue制作探探滑动堆叠组件的实例代码
Mar 07 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
Jun 12 Javascript
layui 实现table翻页滚动条位置保持不变的例子
Sep 05 Javascript
js cavans实现静态滚动弹幕
May 21 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
Jul 24 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
Feb 05 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
一个MYSQL操作类
2006/11/16 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Python ljust rjust center输出
2008/09/06 Python
Python实现的ini文件操作类分享
2014/11/20 Python
Python下的twisted框架入门指引
2015/04/15 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
python实现简单学生信息管理系统
2020/04/09 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
什么是Remote Module
2016/06/10 面试题
小学生自我评价范例
2013/09/24 职场文书
运动会开幕式解说词
2014/02/05 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
计划生育汇报材料
2014/12/26 职场文书
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP