用js写了一个Map,带遍历功能,请大家点评下啦。
/**
- 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,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[i];
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[i] = {
key : this.keys[i],value : this.data[i]
};
}
return entrys;
};
/**
- 判断Map是否为空
*/
this.isEmpty = function() {
return this.keys.length == 0;
};
/**
/**
- 重写toString
*/
this.toString = function(){
var s = "{";
for(var i=0;i<this.keys.length;i++,s+=','){
var k = this.keys[i];
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,index){
s += index+":"+ key+"="+value+"\n";
});
alert(s);
}
//testMap.htm
?
Test Map
- 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,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[i];
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[i] = {
key : this.keys[i],value : this.data[i]
};
}
return entrys;
};
/**
- 判断Map是否为空
*/
this.isEmpty = function() {
return this.keys.length == 0;
};
/**
/**
- 重写toString
*/
this.toString = function(){
var s = "{";
for(var i=0;i<this.keys.length;i++,s+=','){
var k = this.keys[i];
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,index){
s += index+":"+ key+"="+value+"\n";
});
alert(s);
}
//testMap.htm
?