使用Javascript实现简单的Map

转载 2007年09月19日 15:46:00
最近做的一个项目需要大量地使用到js脚本,于是花了点时间阅读了prototype及extjs等流行js库的一些实现。js作为已经应用了多年的面向过程的客户端脚本语言,近两年随着Ajax技术的应用而再度流行起来,并且在代码实现的复杂度提高了许多,因此需要通过模拟服务端语言的一些面向对象特征,使得js代码的编写更有抽象性、灵活性及可维护性。
  Map的数据结果对于服务端语言来说是再平常不过,但对于js语言却没有默认的实现。因此我自己尝试写了一个简单Map的实现,尽量模拟了一些面向对象的特征。
  代码如下实现:
  
       js 代码 ih-map.js

/**//*
 * ih-map
 * Copyright(c) 2006-2007, Islandhill
 * yufengsu@gmail.com
 
*/


//name space
var Ih=...{};
Ih.Map
=Class.create();

//defines the prototype of the Map.
Ih.Map.prototype=...{
    initialize:
function()...{
        
this.m=new Array();
    }
,
    put:
function(k,v)...{
        
var newEntry=new Ih.MapEntry(k,v);
        
for(var i=0;i<this.m.length;i++)...{
            
var entry=this.m[i];
            
if(entry.keyEquals(k))...{
                
return;
            }

        }

        
this.m.push(newEntry);        
    }
,
    get:
function(k)...{
        
for(var i=0;i<this.m.length;i++)...{
            
var entry=this.m[i];
            
if(entry.keyEquals(k))...{
                
return entry.value;
            }

        }

        
return null;
    }
,
    remove:
function(k)...{
        
var entryPoped;
        
for(var i=0;i<this.m.length;i++)...{
            entryPoped
=this.m.pop();
            
if(entryPoped.keyEquals(k))...{
                
break;
            }
else...{
                
this.m.unshift(entryPoped);
            }

        }

    }

    ,
    getSize:
function()...{
        
return this.m.length;
    }
,
    getKeys:
function()...{
        
var keys=new Array();
        
for(var i=0;i<this.m.length;i++)...{
            keys.push(
this.m[i].key);
        }

        
return keys;
    }
,
    getValues:
function()...{
        
var values=new Array();
        
for(var i=0;i<this.m.length;i++)...{
            values.push(
this.m[i].value);
        }

        
return values;
    }
,
    isEmpty:
function()...{
        
return (this.m==null||this.m.length<=0);
    }
,
    containsKey:
function(k)...{
        
for(var i=0;i<this.m.length;i++)...{
            
if(this.m[i].keyEquals(k))
                
return true;
        }

        
return false;
    }
,
    putAll:
function(map)...{
        
if(map==null||typeof map!="object")...{
            
throw new Error("the object to be put should be a valid object");
        }

        
for(var i=0;i<map.getSize();i++)...{
            
this.put(map.m[i].key,map.m[i].value);
        }

    }

}
;
    

//single entry structure in the Map
Ih.MapEntry=function(k,v)...{
    
this.key=k;
    
this.value=v;
    
this.keyEquals=function(key2)...{
        
if(this.key==key2)...{
            
return true;
        }
else...{
            
return false;
        }

    }

}




  测试代码:simpleMapTest.html ,另外需包含prototype的库
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
    
<title>simpleMapTest.html</title>
    
    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    
<meta http-equiv="description" content="this is my page">
    
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    
    
<script type="text/javascript" src="js/prototype.js"></script>
    
<script type="text/javascript" src="js/ih-map.js"></script>
    
  
<script type="text/javascript">...   
    
var map=new Ih.Map();
    map.put(
'name','islandhill');
    map.put(
'gender','male');
    map.put(
'location','xiamen');
    
    
//test get size
    alert(map.getSize());
    
    
//test get
    alert(map.get('name')+","+map.get('gender')+","+map.get('location')+","+map.get('notDefined'));
    
    
//test remove,containsKey,isEmpty
    map.remove('location');
    map.remove(
'notDefined');
    alert(map.containsKey(
'location'));
    alert(map.isEmpty());
    alert(map.getSize());
    
    
//test getKeys, get values is the same stuff
    var keys=map.getKeys();
    
var keysStr="";
    
for(var i=0;i<keys.length;i++)...{
        
        keysStr
+=keys[i]+" ";
    }

    alert(keysStr);
    
    
//get put all
    var map2=new Ih.Map();
    map2.put(
'dept','sdev');
    map2.put(
'position','CTO');
    map.putAll(map2);
    alert(map.getSize());
    alert(map.get(
'position'));
    
    
//test 
  
</script>
    
  
</head>
  
  
<body>

  
</body>
</html>


 

javascript实现简单的Map示例

转载:http://www.jb51.net/article/44742.htm /* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * ...
  • a312024054
  • a312024054
  • 2017年04月17日 15:07
  • 554

JavaScript 实现Map

var map=new Map(); map.put("a","A");map.put("b","B");map.put("c","C"); map.get("a"); //返回:A map.ent...
  • kevin_Luan
  • kevin_Luan
  • 2014年06月23日 11:42
  • 6309

Javascript map 如何实现

javascript没有原生态的map对象。 如果在javascript中想要使用类似于java中的map,该如何操作呢?...
  • chinalwb
  • chinalwb
  • 2014年09月13日 23:19
  • 4313

javascript Array.map 源码解读

// 实现 ECMA-262, Edition 5, 15.4.4.19 // 参考: http://es5.github.com/#x15.4.4.19 if (!Array.prototype.m...
  • liuhui_306
  • liuhui_306
  • 2016年02月19日 14:47
  • 845

用JavaScript实现map数据结构

前一段时间和同事在一起讨论,什么才能够改善我们的Javascrip代码。我当时的反应,就是“适合场景的数据结构,数据结构为王”,数据结构的设计优良要比代码的优良更好,没有很好的数据结构很难写出清晰、简...
  • jkler_doyourself
  • jkler_doyourself
  • 2008年03月16日 15:38
  • 6093

JavaScript 实现类似Java Map对象

!(function (window) { /** * Map对象构造函数 * @class * @constructor */ var Map ...
  • u011884290
  • u011884290
  • 2016年08月15日 16:21
  • 687

JavaScript之射击类小游戏的简单示例

Space Shooter #range{ position:absolute; width:100%; height:300px; left:0px; ...
  • cighao
  • cighao
  • 2015年10月26日 21:04
  • 1215

java自己实现的简单map

package my.map; public class MyMap {     Entry[]array;     intsize;          publicMyMap() ...
  • qq_35529801
  • qq_35529801
  • 2017年12月03日 09:34
  • 53

利用javascript实现原生简单ajax的方法。

利用javascript实现原生简单ajax的方法。  实现ajax之前必须要创建一个 XMLHttpRequest (IE6↑)对象。如果不支持创建该对象的浏览器,则需要创建 ActiveX...
  • linjy520
  • linjy520
  • 2017年03月16日 14:22
  • 237

使用Javascript实现简单的Map

最近做的一个项目需要大量地使用到js脚本,于是花了点时间阅读了prototype及extjs等流行js库的一些实现。js作为已经应用了多年的面向过程的客户端脚本语言,近两年随着Ajax技术的应用而再度...
  • islandhill
  • islandhill
  • 2007年09月19日 09:57
  • 819
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Javascript实现简单的Map
举报原因:
原因补充:

(最多只允许输入30个字)