一个简单的JavaScript Map

用js写了一个Map,带遍历功能,请大家点评下啦。

//map.js
Js代码

  1. Array.prototype.remove = function(s) { 
  2.    for (var i = 0; i < this.length; i++) { 
  3.        if (s == this
  4.            this.splice(i, 1); 
  5.    } 
  6. } 
  7. 
  8. /**
  9.  * Simple Map
  10.  * 
  11.  * 
  12.  * var m = new Map();
  13.  * m.put('key','value');
  14.  * ...
  15.  * var s = "";
  16.  * m.each(function(key,value,index){
  17.  *      s += index+":"+ key+"="+value+"\n";
  18.  * });
  19.  * alert(s);
  20.  * 
  21.  * @author dewitt
  22.  * @date 2008-05-24
  23.  */ 
  24. function Map() { 
  25.    /** 存放键的数组(遍历用到) */ 
  26.    this.keys = new Array(); 
  27.    /** 存放数据 */ 
  28.    this.data = new Object(); 
  29.     
  30.    /**
  31.      * 放入一个键值对
  32.      * @param {String} key
  33.      * @param {Object} value
  34.      */ 
  35.    this.put = function(key, value) { 
  36.        if(this.data[key] == null){ 
  37.            this.keys.push(key); 
  38.        } 
  39.        this.data[key] = value; 
  40.    }; 
  41.     
  42.    /**
  43.      * 获取某键对应的值
  44.      * @param {String} key
  45.      * @return {Object} value
  46.      */ 
  47.    this.get = function(key) { 
  48.        return this.data[key]; 
  49.    }; 
  50.     
  51.    /**
  52.      * 删除一个键值对
  53.      * @param {String} key
  54.      */ 
  55.    this.remove = function(key) { 
  56.        this.keys.remove(key); 
  57.        this.data[key] = null; 
  58.    }; 
  59.     
  60.    /**
  61.      * 遍历Map,执行处理函数
  62.      * 
  63.      * @param {Function} 回调函数 function(key,value,index){..}
  64.      */ 
  65.    this.each = function(fn){ 
  66.        if(typeof fn != 'function'){ 
  67.            return; 
  68.        } 
  69.        var len = this.keys.length; 
  70.        for(var i=0;i<len;i++){ 
  71.            var k = this.keys
  72.            fn(k,this.data[k],i); 
  73.        } 
  74.    }; 
  75.     
  76.    /**
  77.      * 获取键值数组(类似Java的entrySet())
  78.      * @return 键值对象{key,value}的数组
  79.      */ 
  80.    this.entrys = function() { 
  81.        var len = this.keys.length; 
  82.        var entrys = new Array(len); 
  83.        for (var i = 0; i < len; i++) { 
  84.            entrys = { 
  85.                key : this.keys
  86.                value : this.data 
  87.            }; 
  88.        } 
  89.        return entrys; 
  90.    }; 
  91.     
  92.    /**
  93.      * 判断Map是否为空
  94.      */ 
  95.    this.isEmpty = function() { 
  96.        return this.keys.length == 0; 
  97.    }; 
  98.     
  99.    /**
100.      * 获取键值对数量
101.      */ 
102.    this.size = function(){ 
103.        return this.keys.length; 
104.    }; 
105.     
106.    /**
107.      * 重写toString 
108.      */ 
109.    this.toString = function(){ 
110.        var s = "{"; 
111.        for(var i=0;i<this.keys.length;i++,s+=','){ 
112.            var k = this.keys
113.            s += k+"="+this.data[k]; 
114.        } 
115.        s+="}"; 
116.        return s; 
117.    }; 
118. } 
119. 
120. 
121. function testMap(){ 
122.    var m = new Map(); 
123.    m.put('key1','Comtop'); 
124.    m.put('key2','南方电网'); 
125.    m.put('key3','景新花园'); 
126.    alert("init:"+m); 
127.     
128.    m.put('key1','康拓普'); 
129.    alert("set key1:"+m); 
130.     
131.    m.remove("key2"); 
132.    alert("remove key2: "+m); 
133.     
134.    var s =""; 
135.    m.each(function(key,value,index){ 
136.        s += index+":"+ key+"="+value+"\n"; 
137.    }); 
138.    alert(s); 
139. } 

Array.prototype.remove = function(s) {
        for (var i = 0; i < this.length; i++) {
                if (s == this)
                        this.splice(i, 1);
        }
}

/**
* Simple Map
*
*
* var m = new Map();
* m.put('key','value');
* ...
* var s = "";
* m.each(function(key,value,index){
*                s += index+":"+ key+"="+value+"\n";
* });
* alert(s);
*
* @author dewitt
* @date 2008-05-24
*/
function Map() {
        /** 存放键的数组(遍历用到) */
        this.keys = new Array();
        /** 存放数据 */
        this.data = new Object();
       
        /**
        * 放入一个键值对
        * @param {String} key
        * @param {Object} value
        */
        this.put = function(key, value) {
                if(this.data[key] == null){
                        this.keys.push(key);
                }
                this.data[key] = value;
        };
       
        /**
        * 获取某键对应的值
        * @param {String} key
        * @return {Object} value
        */
        this.get = function(key) {
                return this.data[key];
        };
       
        /**
        * 删除一个键值对
        * @param {String} key
        */
        this.remove = function(key) {
                this.keys.remove(key);
                this.data[key] = null;
        };
       
        /**
        * 遍历Map,执行处理函数
        *
        * @param {Function} 回调函数 function(key,value,index){..}
        */
        this.each = function(fn){
                if(typeof fn != 'function'){
                        return;
                }
                var len = this.keys.length;
                for(var i=0;i<len;i++){
                        var k = this.keys;
                        fn(k,this.data[k],i);
                }
        };
       
        /**
        * 获取键值数组(类似Java的entrySet())
        * @return 键值对象{key,value}的数组
        */
        this.entrys = function() {
                var len = this.keys.length;
                var entrys = new Array(len);
                for (var i = 0; i < len; i++) {
                        entrys = {
                                key : this.keys,
                                value : this.data
                        };
                }
                return entrys;
        };
       
        /**
        * 判断Map是否为空
        */
        this.isEmpty = function() {
                return this.keys.length == 0;
        };
       
        /**
        * 获取键值对数量
        */
        this.size = function(){
                return this.keys.length;
        };
       
        /**
        * 重写toString
        */
        this.toString = function(){
                var s = "{";
                for(var i=0;i<this.keys.length;i++,s+=','){
                        var k = this.keys;
                        s += k+"="+this.data[k];
                }
                s+="}";
                return s;
        };
}


function testMap(){
        var m = new Map();
        m.put('key1','Comtop');
        m.put('key2','南方电网');
        m.put('key3','景新花园');
        alert("init:"+m);
       
        m.put('key1','康拓普');
        alert("set key1:"+m);
       
        m.remove("key2");
        alert("remove key2: "+m);
       
        var s ="";
        m.each(function(key,value,index){
                s += index+":"+ key+"="+value+"\n";
        });
        alert(s);
}

//testMap.htm
Html代码

  1. <html> 
  2. <head> 
  3. <title>Test Map</title> 
  4. <script language="javascript" src="map.js"> 
  5. </script> 
  6. </head> 
  7. <body> 
  8. <input type="button" value="test" > 
  9. </body> 
  10. </html> 

<html>
<head>
<title>Test Map</title>
<script language="javascript" src="map.js">
</script>
</head>
<body>
<input type="button" value="test" >
</body>
</html>



下载 (1.2 KB)
最后编辑java 最后编辑于 2008-06-17 14:42:30