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


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

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

    属性的枚举:

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

     1 var obj = {
     2     name : 'obj1',
     3     age : 20,
     4     height : '176cm'
     5 }
     6         
     7 var str = '';
     8 for(var name in obj)
     9 {
    10     str += name + ':' + obj[name] + '\n';
    11 }
    12 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的实现方法:

     1 function HashTable()
     2 {
     3     var size = 0;
     4     var entry = new Object();
     5 
     6     this.add = function (key , value)
     7     {
     8         if(!this.containsKey(key))
     9         {
    10             size ++ ;
    11         }
    12         entry[key] = value;
    13     }
    14 
    15     this.getValue = function (key)
    16     {
    17         return this.containsKey(key) ? entry[key] : null;
    18     }
    19 
    20     this.remove = function ( key )
    21     {
    22         ifthis.containsKey(key) && ( delete entry[key] ) )
    23         {
    24             size --;
    25         }
    26     }
    27 
    28     this.containsKey = function ( key )
    29     {
    30         return (key in entry);
    31     }
    32 
    33     this.containsValue = function ( value )
    34     {
    35         for(var prop in entry)
    36         {
    37             if(entry[prop] == value)
    38             {
    39                 return true;
    40             }
    41         }
    42         return false;
    43     }
    44 
    45     this.getValues = function ()
    46     {
    47         var values = new Array();
    48         for(var prop in entry)
    49         {
    50             values.push(entry[prop]);
    51         }
    52         return values;
    53     }
    54 
    55     this.getKeys = function ()
    56     {
    57         var keys = new Array();
    58         for(var prop in entry)
    59         {
    60             keys.push(prop);
    61         }
    62         return keys;
    63     }
    64 
    65     this.getSize = function ()
    66     {
    67         return size;
    68     }
    69 
    70     this.clear = function ()
    71     {
    72         size = 0;
    73         entry = new Object();
    74     }
    75 }

    测试:

    代码
    <!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>
  • 相关阅读:
    干货—MySQL常见的面试题+索引原理分析!
    如何设计一个百万级的消息推送系统
    【金三银四跳槽季】Java工程师如何在1个月内做好面试准备?
    Nginx实现请求的负载均衡 + keepalived实现Nginx的高可用
    java函数式编程之Supplier
    SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
    Redis创建集群报错
    阿里云服务器Tomcat无法从外部访问
    SSM框架学习之高并发秒杀业务--笔记5-- 并发优化
    在windows上部署使用Redis
  • 原文地址:https://www.cnblogs.com/hyl8218/p/1650589.html
Copyright © 2020-2023  润新知