JavaScript基础(3) -- JavaScript实现Map对象

  1. function HashMap()     

  2.  {     

  3.      /** Map 大小 **/    

  4.      var size = 0;     

  5.      /** 对象 **/    

  6.      var entry = new Object();     

  7.           

  8.      /** 存 **/    

  9.      this.put = function (key , value)     

  10.      {     

  11.          if(!this.containsKey(key))     

  12.          {     

  13.              size ++ ;     

  14.          }     

  15.          entry[key] = value;     

  16.      }     

  17.           

  18.      /** 取 **/    

  19.      this.get = function (key)     

  20.      {     

  21.          return this.containsKey(key) ? entry[key] : null;     

  22.      }     

  23.           

  24.      /** 删除 **/    

  25.      this.remove = function ( key )     

  26.      {     

  27.          if( this.containsKey(key) && ( delete entry[key] ) )     

  28.          {     

  29.              size --;     

  30.          }     

  31.      }     

  32.           

  33.      /** 是否包含 Key **/    

  34.      this.containsKey = function ( key )     

  35.      {     

  36.          return (key in entry);     

  37.      }     

  38.           

  39.      /** 是否包含 Value **/    

  40.      this.containsValue = function ( value )     

  41.      {     

  42.          for(var prop in entry)     

  43.          {     

  44.              if(entry[prop] == value)     

  45.              {     

  46.                  return true;     

  47.              }     

  48.          }     

  49.          return false;     

  50.      }     

  51.           

  52.      /** 所有 Value **/    

  53.      this.values = function ()     

  54.      {     

  55.          var values = new Array();     

  56.          for(var prop in entry)     

  57.          {     

  58.              values.push(entry[prop]);     

  59.          }     

  60.          return values;     

  61.      }     

  62.           

  63.      /** 所有 Key **/    

  64.      this.keys = function ()     

  65.      {     

  66.          var keys = new Array();     

  67.          for(var prop in entry)     

  68.          {     

  69.              keys.push(prop);     

  70.          }     

  71.          return keys;     

  72.      }     

  73.           

  74.      /** Map Size **/    

  75.      this.size = function ()     

  76.      {     

  77.          return size;     

  78.      }     

  79.           

  80.      /* 清空 */    

  81.      this.clear = function ()     

  82.      {     

  83.          size = 0;     

  84.          entry = new Object();     

  85.      }     

  86.  }     

  87.       

  88.  var map = new HashMap();     

  89.       

  90.  /*   

  91.  map.put("A","1");   

  92.  map.put("B","2");   

  93.  map.put("A","5");   

  94.  map.put("C","3");   

  95.  map.put("A","4");   

  96.  */    

  97.  /*   

  98.  alert(map.containsKey("XX"));   

  99.  alert(map.size());   

  100.  alert(map.get("A"));   

  101.  alert(map.get("XX"));   

  102.  map.remove("A");   

  103.  alert(map.size());   

  104.  alert(map.get("A"));   

  105.  */    

  106.       

  107.  /** 同时也可以把对象作为 Key **/    

  108.  /*   

  109.  var arrayKey = new Array("1","2","3","4");   

  110.  var arrayValue = new Array("A","B","C","D");   

  111.  map.put(arrayKey,arrayValue);   

  112.  var value = map.get(arrayKey);   

  113.  for(var i = 0 ; i < value.length ; i++)   

  114.  {   

  115.      //alert(value[i]);   

  116.  }   

  117.  */    

  118.  /** 把对象做为Key时 ,自动调用了该对象的 toString() 方法 其实最终还是以String对象为Key**/    

  119.       

  120.  /** 如果是自定义对象 那自己得重写 toString() 方法 否则 . 就是下面的结果 **/    

  121.       

  122.  function MyObject(name)     

  123.  {     

  124.      this.name = name;     

  125.  }     

  126.       

  127.  /**   

  128.  function MyObject(name)   

  129.  {   

  130.      this.name = name;   

  131.         

  132.      this.toString = function ()   

  133.      {   

  134.          return this.name;   

  135.      }   

  136.  }   

  137.  **/    

  138.  var object1 = new MyObject("小张");     

  139.  var object2 = new MyObject("小名");     

  140.       

  141.  map.put(object1,"小张");     

  142.  map.put(object2,"小名");     

  143.  alert(map.get(object1));     

  144.  alert(map.get(object2));     

  145.  map.remove("xxxxx");     

  146.  alert(map.size());     

  147.       

  148.  /** 运行结果 小名 小名 size = 1 **/    

  149.       

  150.  /** 如果改成复写toString()方法的对象 , 效果就完全不一样了 **/    

  151.       

  152.  </script>    

posted @ 2016-12-08 20:04  稼轩  阅读(74)  评论(0编辑  收藏  举报