哈希表(hashtable)的javascript简单实现

来源:互联网 发布:手机淘宝查号截图视频 编辑:程序博客网 时间:2024/06/05 05:56

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运算符也不会检测到该属性。

1 delete entry[key];
2 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();    }}

测试:

代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><!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>


0 0
原创粉丝点击