一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

js实现hashtable的赋值、取值、遍历的教程

时间:2016-12-26 编辑:简简单单 来源:一聚教程网

本文实例讲述了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(){
      varcount = 0;
      for(variinthis.content) count++;
      returncount;
    },
    //返回hashTable中的值
    items:function(key){
      if(this.contains(key)){
        returnthis.obj[key];
      }
    },
    //增加值到hashtable
    add:function(key,value){
      if(this.obj.hasOwnProperty(key)){
        returnfalse;
      }else{
        this.obj[key] = value;
        returntrue;
      }
    },
    //清空hashtable中的值
    clear:function(){
      this.obj = {};
    },
    //检测hashTable对象中是否含有此属性
    contains:function(key){
      returnthis.obj.hasOwnProperty(key);
    },
    //移除hashTable中对象的值
    remove:function(key){
      deletethis.obj[key];
    }
}

这样我们就能像c#语言里面的那样进行操作了。

还一个简单的变体版:

// js哈希表
functionHashTable() {
  this.ObjArr = {};
  this.Count = 0;
  //添加
  this.Add =function(key, value) {
    if(this.ObjArr.hasOwnProperty(key)) {
      returnfalse;//如果键已经存在,不添加
    }else{
      this.ObjArr[key] = value;
      this.Count++;
      returntrue;
    }
  }
  //是否包含某项
  this.Contains =function(key) {
    returnthis.ObjArr.hasOwnProperty(key);
  }
  //取某一项 其实等价于this.ObjArr[key]
  this.GetValue =function(key){
    if(this.Contains(key)) {
      returnthis.ObjArr[key];
    }else{
      throwError("Hashtable not cotains the key: "+ String(key));//脚本错误
      //return;
    }
  }
  //移除
  this.Remove =function(key) {
    if(this.Contains(key)) {
      deletethis.ObjArr[key];
      this.Count--;
    }
  }
  //清空
  this.Clear =function(){
    this.ObjArr = {};this.Count = 0;
  }
}
//员工
functionemployee(id, userName) {
  this.id = id;
  this.userName = userName;
}
functiontest() {
  varht =newHashTable();
  vartmpEmployee =null;
  for(vari = 1; i < 6; i++) {
    tmpEmployee =newemployee(i,"Employee_"+ i);
    ht.Add(i, tmpEmployee);
  }
  for(vari = 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)); //异常
  varresult = 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(){
  vararr =this,obj={};
  for(vari =0, len=arr.length;i
    varkey = arr[i];
    if( ! obj[key]){
      obj[key] = 1;
    }else{
      obj[key]++;
    }
  }
  varmax = -1,maxStr;
  for( keyinobj){
    if(obj[key]>max){
      max = obj[key];
      maxStr = key;
    }
  }
  //alert(maxStr);
  return[maxStr,max];
}

热门栏目