javascript中没有像c#,java那样的哈希表(hashtable)的实现。在js中,object属性的实现就是hash表,因此只要在object上封装点方法,简单的使用obejct管理属性的方法就可以实现简单高效的hashtable。

首先简单的介绍关于属性的一些方法:

属性的枚举:

for/in循环是遍历对象属性的方法。如

 var obj = {
name : 'obj1',
age : 20,
height : '176cm'
} var str = '';
for(var name in obj)
{
str += name + ':' + obj[name] + '\n';
}
alert(str);

输出为:name:obj1

  age:20

  height:176cm

检查属性是否存在:

in运算符可以用来测试一个属性是否存在。

this.containsKey = function ( key )
{
return (key in entry);
}

删除属性

使用delete运算符来删除一个对象的属性。使用delete删除的属性,for/in将不会枚举该属性,并且in运算符也不会检测到该属性。

 delete entry[key];
delete obj.name;

下面是哈希表(hashtable)的js的实现方法:

function HashTable()
{
var size = 0;
var entry = new Object(); this.add = function (key , value)
{
if(!this.containsKey(key))
{
size ++ ;
}
entry[key] = value;
} this.getValue = function (key)
{
return this.containsKey(key) ? entry[key] : null;
} this.remove = function ( key )
{
if( this.containsKey(key) && ( delete entry[key] ) )
{
size --;
}
} this.containsKey = function ( key )
{
return (key in entry);
} this.containsValue = function ( value )
{
for(var prop in entry)
{
if(entry[prop] == value)
{
return true;
}
}
return false;
} this.getValues = function ()
{
var values = new Array();
for(var prop in entry)
{
values.push(entry[prop]);
}
return values;
} this.getKeys = function ()
{
var keys = new Array();
for(var prop in entry)
{
keys.push(prop);
}
return keys;
} this.getSize = function ()
{
return size;
} this.clear = function ()
{
size = 0;
entry = new Object();
}
}

测试:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HashTable</title>
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/HashTable.js"></script>
<script type="text/javascript">
function MyObject(name)
{
this.name = name;
this.toString = function(){
return this.name;
}
} $(function(){
var map = new HashTable();
map.add("A","1");
map.add("B","2");
map.add("A","5");
map.add("C","3");
map.add("A","4"); var arrayKey = new Array("1","2","3","4");
var arrayValue = new Array("A","B","C","D");
map.add(arrayKey,arrayValue);
var value = map.getValue(arrayKey); var object1 = new MyObject("小4");
var object2 = new MyObject("小5"); map.add(object1,"小4");
map.add(object2,"小5"); $('#console').html(map.getKeys().join('|') + '<br>');
}) </script>
</head>
<body>
<div id="console"></div>
</body>
</html>

from:http://www.cnblogs.com/hyl8218/archive/2010/01/18/1650589.html

哈希表(hashtable)的javascript简单实现的更多相关文章

  1. C++ 哈希表 (hashtable) 用于保存简单的数据,及数据查找,数据删除

    /*hashtable.h*/ #include<iostream> #include <string> #include<vector> using namesp ...

  2. C# 哈希表HashTable的简单使用

    本人C#程序菜鸟级别的存在,写博客一方面是为了知识的共享,另一方面也是为了督促自己:大神,可以忽略这篇文文的.废话到此...... 哈希表是可以直接进行访问的数据结构,在形式上是类似字典的.不同的是, ...

  3. 哈希表(Hashtable)简述

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中 ...

  4. c/c++ 哈希表 hashtable

    c/c++ 哈希表 hashtable 概念:用key去查找value 实现hash函数有很多方法,本文用除留余数法. 除留余数法的概念: 取一个固定的基数的余数,注意不能用偶数,用偶数的话,分布会不 ...

  5. C#中哈希表(HashTable)的用法详解以及和Dictionary比较

    1.  哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对, ...

  6. Java中哈希表(Hashtable)是如何实现的

    Java中哈希表(Hashtable)是如何实现的 Hashtable中有一个内部类Entry,用来保存单元数据,我们用来构建哈希表的每一个数据是Entry的一个实例.假设我们保存下面一组数据,第一列 ...

  7. 转 C#中哈希表(HashTable)的用法详解

    看了一遍有关哈希表的文字,作者总结的真是不错 .收藏起来 1.  哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提 ...

  8. [PHP] PHP数组的实现哈希表(HashTable)结构

    PHP中使用最为频繁的数据类型非字符串和数组莫属,使用哈希表实现的PHP数组.1.数据结构:保存哈希表容器,保存数据的容器2.哈希函数实现:需要尽可能的将不同的key映射到不同的槽(bucket)中, ...

  9. 哈希表 HashTable(又名散列表)

    简介 其实通过标题上哈希表的英文名HashTable,我们就可以看出这是一个组合的数据结构Hash+Table. Hash是什么?它是一个函数,作用可以通过一个公式来表示: index = HashF ...

随机推荐

  1. cocos 事件转发

    CCDirector在函数setOpenGLView中设置pobOpenGLView,同时会掉用 m_pobOpenGLView->setTouchDelegate(m_pTouchDispat ...

  2. Gof-23种设计模式名称列表

    工欲善其事,必先利其器. 在真正使用设计模式之前,必须知道各个设计模式对应的场景.设计模式是针对某种固定的场景下产生的固定解决方案.只有明确的场景,才会有明确的设计方式和方法. 设计模式全集: Abs ...

  3. 几种不同风格的Toast

    一般情况下,我们使用Toast默认的风格就行了,只是有些时候为了达到我们自己想要的效果需要自定义一下,包括自定义显示的位置,显示的内容以及完全自定义里面的布局,代码如下: activity: pack ...

  4. 保存网页MHT

    uses ADODB_TLB, CDO_TLB, ComObj,MSHTML;{$R *.dfm}{能把网页如 WWW.QQ.COM保存为一个单文件 .MHT但不能把一个 A.HTM 保存为一个单文件 ...

  5. 单片机IO口驱动能力

    以STM32的IO口为例,最大的输出电流和灌入电流在芯片手册上都有说明.单个IO口一般都是十几mA到几十mA,同时总的VDD电流也有限制,大概为150mA.所以单片机驱动外设时,如果不是信号型而是功率 ...

  6. Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

    一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...

  7. 晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用

    遇到一个比较后悔莫及事情,使用了hibernate 的 merge和cascade="all-delete-orphan" ,子表数据被删除了. 1.使用cascade=" ...

  8. [AngularJS] Extract predicate methods into filters for ng-if and ng-show

    Leaking logic in controllers is not an option, filters are a way to refactor your code and are compa ...

  9. android 76 使用get post方式提交数据

    get方式: package com.itheima.getmethod; import java.io.InputStream; import java.net.HttpURLConnection; ...

  10. linux下64位汇编的系统调用系列

    http://blog.csdn.net/mydo/article/category/3084893