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

本文实例讲述了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<len;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];

}

时间: 2024-10-03 23:38:19

js实现hashtable的赋值、取值、遍历的教程的相关文章

js获取FCK编辑器信息/取值/赋值具体方法

编辑器信息  代码如下 复制代码 function getEditorContents(){     var oEditor = FCKeditorAPI.GetInstance("content");     alert(oEditor.GetXHTML(true)); } //向编辑器插入指定代码 function insertHTMLToEditor(codeStr){     var oEditor = FCKeditorAPI.GetInstance("conten

JS子父窗口互相取值赋值详解介绍

子窗口赋值到父窗口  代码如下 复制代码 <script> function openWin(str) {     window.open(siteurl+"popup/"+str, null,'width=800,height=500'); // 打开窗口 } </script> <input type="text" id="title" name="picPath" value="&

jQuery对html元素的取值与赋值实例详解_jquery

本文实例讲述了jQuery对html元素的取值与赋值方法.分享给大家供大家参考,具体如下: Jquery给基本控件的取值.赋值 TEXTBOX: var str = $('#txt').val(); $('#txt').val("Set Lbl Value"); //文本框,文本区域: $("#text_id").attr("value",'');//清空内容 $("#text_id").attr("value&qu

Easyui的组合框的取值与赋值_jquery

近期由于工作需要,用户点击下拉框可以试下多选的效果,效果大致如下图: 实现的代码如下: <select id="iweekDay" class="col-sm-4 form-control easyui-combobox " name="state" data-options="multiple:true,multiline:true" style="width:350px;height:35px"

好多人遇到这问题却都没有解决方案,求高手指点!!!同一个用户控件在一个页面多次调用,取值混乱(附有代码和截图)

问题描述 自己新写了一个用户控件,类似autocomplete效果选择完人后效果如下,用户控件用的是一个文本框和一个div,用户控件当选中人双击的时候会把相应的id和text保存在隐藏的文本框里,一个页面引用一个的时候效果还不错,现在的问题是一个页面只能用一个这种控件,当一个页面有多个的时候,取值的时候取的id和文本竟然都跟第一个用户控件选择的值一样,现在在Gridview的一模板列中需要加入这个控件,如第一个图片所示,但是每次选完人后台取值的时候都是后面选择的都跟第一个是一样,现在初步感觉可能

js给hidden赋值,后台取值不到值

问题描述 functionsay(fenshu){varjiade='<%=jiade.ClientID%>';varbb=fenshu;document.getElementById(jiade).value=bb;document.forms[0].submit();varst1r="<%=hello()%>";alert(st1r);}<inputid="jiade"type="hidden"runat=&qu

JS子父窗口互相操作取值赋值的方法介绍_javascript技巧

$("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementByIdx_x("父窗口元素ID"): 取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document); 类似的,取其它窗口的方法大同小异$(se

CYQ.Data 快速开发之UI(赋值、取值、绑定)原理

昨夜园子猴子问了几个我CYQ.Data使用的小问题,经过简单解答后,他表示"妈妈再也不用担心我的学习",并于事后以资鼓励,希望这框架越走越好. 除了技术上的交流,双方在生活,S上面的问题上也进行了双边友好交流,最后猴子给发了一个国外的Sex网站,对此分享行为,我表示高度赞赏.   好了,言归正题,讲点技术问题: CYQ.Data 的使用操作方式,已经有相关文章介绍了,就不再介绍了. 本节就讲一下实现原理,具体源码,可直接下载开源的V4.0可以学习. 下载地址:http://www.cy

jquery给dropdownlist动态赋值,asp.net取值为空!

问题描述 $("#small").append("<optionvalue="+data[1]+">"+data[0]+"</option>");stringsid=small.SelectedValue;//这里取值为"";请高手解答 解决方案 解决方案二:用js加载就用js取值咩.$("#select").val()解决方案三:$("#small&q