js 中怎样生命一个Hasmap对象?怎样从hasmap中取得key所对应的值?

解决方案 »

  1.   

    mei ren lai a   !!!
      

  2.   

    JS中没有hasmap数据类型啊.楼主平时记得结帖啊.
      

  3.   

    JS里面你可以认为所有对象都是Map
    var o = new Object();
    o["s"] = 123;
    alert(o["s"]);就可以了不过LZ你的结贴率有点低了。
      

  4.   

    构造一个呗function Hash()
    {
    this.length = 0;
    this.items = new Array();
    for (var i = 0; i < arguments.length; i += 2) {
    if (typeof(arguments[i + 1]) != 'undefined') {
    this.items[arguments[i]] = arguments[i + 1];
    this.length++;
    }
    }
    }
      

  5.   

    好了,基本上这样就能用了:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
      <title>试试</title>
    </head><style type="text/css">
    div#console {
      width: 600px;
      height: 400px;
      font: normal 12px/14px "courier new";
      background-color: black;
      color: lime;
      padding: 5px;
      border: 1px sold black;
      overflow: auto;
    }
    </style><script type="text/javascript">
    Object.prototype.propertyCount = function() {
      if(Object.prototype.hasOwnProperty('__count__')) {
        return this.__count__;
      }
      var count = 0;
      for(var i in this) {
        if(this.hasOwnProperty(i)) {
          count++;
        }
      }
      return count;
    }window.$ = function(id) {
      if(typeof(id) == 'string') {
        return document.getElementById(id);
      }
      return id;
    }/**
     * Map 类,使用 JavaScript 属性的特性来构建 Map
     */
    var Map = function() {
      this.entry = [];
      this.entrySize = 0;
    }Map.prototype = {  size : function() {
        return this.entry.propertyCount();
      },  put : function(key, value) {
        this.entry[key] = value;
        return value;
      },  get : function(key) {
        if(this.containsKey(key)) {
          return this.entry[key];
        }
        return window.undefined;
      },  clear : function() {
        for(var key in this.entry) {
          if(this.containsKey(key)) {
            delete this.entry[key];
          }
        }
      },  remove : function(key) {
        var v = this.entry[key];
        delete this.entry[key];
        return v;
      },  containsKey : function(key) {
        for(var i in this.entry) {
          if(i == key && this.entry.hasOwnProperty(key)) {
            return true;
          }
        }
        return false;
      },  isEmpty : function() {
        return this.size() == 0;
      },  keyArray : function() {
        var keys = [];
        for(var key in this.entry) {
          if(this.containsKey(key)) {
            keys.push(key);
          }
        }
        return keys;
      },  valueArray : function() {
        var values = [];
        for(var key in this.entry) {
          if(this.containsKey(key)) {
            values.push(get(key));
          }
        }
        return values;
      },  entryArray : function() {
        var entrys = [];
        for(var key in this.entry) {
          if(this.containsKey(key)) {
            entrys.push(new Map.Entry(key, this.get(key)));
          }
        }
        return entrys;
      }
    }Map.Entry = function(key, value) {
      this.key = key;
      this.value = value;
    }Map.Entry.prototype = {
      getKey : function() {
        return this.key;
      },
      getValue : function() {
        return this.value;
      }
    }
    /**
     * 类似于 Java 中的 System.out 工具
     */
    var System = {  out : {    println : function(str) {
          System.out.print(str);
          System.out.__printLine__();
        },    print : function(str) {
          System.out.__cache__.push(str);
        },    /**
         * 将数据写入“控制台”,并清空缓冲
         */
        flush : function() {
          $(System.out.__console_container__).innerHTML += System.out.__cache__.join('');
          System.out.__cache__ = [];
        },    __printLine__ : function() {
          System.out.__cache__.push('<br />');
        },    /**
         * System.out.print 的数据缓存,应使用 System.out.flush() 刷新
         */
        __cache__ : [],    /**
         * HTML 中用作控制台 DIV 的 id 值
         */
        __console_container__ : 'console'
      }
    }window.onload = function() {
      var map = new Map();
      map.put('a', 'b');
      map.put('b', 'c');
      map.put('c', null);
      System.out.println('size: ' + map.size());  var entry = map.entryArray();
      for(var i = 0; i < entry.length; i++) {
        System.out.println(entry[i].getKey() + ' --> ' + entry[i].getValue());
      }  System.out.println('a: ' + map.get('a'));
      System.out.println('c: ' + map.get('c'));
      System.out.println('ok: ' + map.get('ok'));  System.out.flush();
    }
    </script>
    <body>
      <div id="console"></div>
    </body>
    </html>
      

  6.   

    5楼的太NB啦!
    不知LZ为何要用HashMap,可以考虑下用json数据格式
      

  7.   

    javaeye的web前端技术有个系列文章叫JavaScript内核系列 讲的比较详细而且能引发一点兴趣  果子大神写的如果能满足LZ需要的话那就不用管这个 如果你想自己写一个的话可以看看这个
      

  8.   

    对了 提示下 JS的数组索引不一定非得是INT型的 也就是说光用数组就可以实现类似HASHMAP的效果
      

  9.   

    **
    * @created date 2008-07-01
    *///需要一个java数据结构中的map类型,扩展js实现map
    //=============================begin map 定义================================
    function Map()
    {
       this.elements = new Array();   /**
       * 获取MAP元素个数
       */
    this.size = function() {
       return this.elements.length;
    }/**
       * 判断MAP是否为空
       */
    this.isEmpty = function() {
       return (this.elements.length < 1);
    }   /**
       * 删除MAP所有元素
       */
    this.clear = function() {
       this.elements = new Array();
    }   /**
       * 向MAP中增加元素(key, value) 
       * @param {Object} _key 
       * @param {Object} _value
       */
       this.put = function(_key, _value) {
    this.elements.push({key:_key, value:_value});
       }   /**
       * 删除指定KEY的元素,成功返回True,失败返回False
       * @param {Object} _key
       */
    this.remove = function(_key) {
       var bln = false;
       try {   
        for (i = 0; i < this.elements.length; i++) { 
         if (this.elements[i].key == _key){
          this.elements.splice(i, 1);
          return true;
         }
        }
       }catch(e){
        bln = false;    
       }
       return bln;
    }/**
    * 获取指定KEY的元素值VALUE,失败返回NULL
    * @param {Object} _key
    */
    this.get = function(_key) {
       try{   
        for (i = 0; i < this.elements.length; i++) {
         if (this.elements[i].key == _key) {
          return this.elements[i].value;
         }
        }
       }catch(e) {
        return null;   
       }
    }/**
    * 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
    * @param {Object} _index
    */
    this.element = function(_index) {
       if (_index < 0 || _index >= this.elements.length)
       {
        return null;
       }
       return this.elements[_index];
    }/**
    * 判断MAP中是否含有指定KEY的元素
    * @param {Object} _key
    */
    this.containsKey = function(_key) {
       var bln = false;
       try {
        for (i = 0; i < this.elements.length; i++) { 
         if (this.elements[i].key == _key){
          bln = true;
         }
        }
       }catch(e) {
        bln = false;    
       }
       return bln;
    }
        
    /**
    * 判断MAP中是否含有指定VALUE的元素
    * @param {Object} _value
    */
    this.containsValue = function(_value) {
       var bln = false;
       try {
        for (i = 0; i < this.elements.length; i++) { 
         if (this.elements[i].value == _value){
          bln = true;
         }
        }
       }catch(e) {
        bln = false;    
       }
       return bln;
    }/**
    * 获取MAP中所有VALUE的数组(ARRAY)
    */
    this.values = function() {
       var arr = new Array();
       for (i = 0; i < this.elements.length; i++) { 
        arr.push(this.elements[i].value);
       }
       return arr;
    }/**
    * 获取MAP中所有KEY的数组(ARRAY)
    */
    this.keys = function() {
       var arr = new Array();
       for (i = 0; i < this.elements.length; i++) { 
        arr.push(this.elements[i].key);
       }
       return arr;
    }
    }//=====================end map 定义============================================