是复制的文章,作者很厉害啊!我要多多学习,加油!!!
http://www.cnblogs.com/zfc2201/archive/2012/07/16/2594389.html,原帖位置
众所周之,js是没有Map类的,要想用还得自己封装一个
(function(win) {
var Map = function() {
this.count = 0;
this.entrySet = {};
};
var proto = Map.prototype;
proto.size = function() {
return this.count;
};
proto.isEmpty = function() {
return this.count === 0;
};
proto.containsKey = function(key) {
if (this.isEmpty()) {
return false;
}
for ( var prop in this.entrySet) {
if (prop === key) {
return true;
}
}
return false;
};
proto.containsValue = function(value) {
if (this.isEmpty()) {
return false;
}
for ( var key in this.entrySet) {
if (this.entrySet[key] === value) {
return true;
}
}
return false;
};
proto.get = function(key) {
if (this.isEmpty()) {
return null;
}
if (this.containsKey(key)) {
return this.entrySet[key];
}
return null;
};
proto.put = function(key, value) {
this.entrySet[key] = value;
this.count++;
};
proto.remove = function(key) {
if (this.containsKey(key)) {
delete this.entrySet[key];
this.count--;
}
};
proto.putAll = function(map) {
if(!map instanceof Map){
return;
}
for ( var key in map.entrySet) {
this.put(key, map.entrySet[key]);
}
};
proto.clear = function() {
for ( var key in this.entrySet) {
this.remove(key);
}
};
proto.values = function() {
var result = [];
for ( var key in this.entrySet) {
result.push(this.entrySet[key]);
}
return result;
};
proto.keySet = function() {
var result = [];
for ( var key in this.entrySet) {
result.push(key);
}
return result;
};
proto.toString = function() {
var result = [];
for ( var key in this.entrySet) {
result.push(key + ":" + this.entrySet[key]);
}
return "{" + result.join() + "}";
};
proto.valueOf = function() {
return this.toString();
};
win.Map = Map;
})(window);
测试:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="Map.js"></script>
<script type="text/javascript">
window.onload = function()
{
var map = new Map();
map.put("name", "jack");
map.put("age", "28");
map.put("gender", "male");
println(map.get("name"));
println(map.isEmpty());
println(map.get("name"));
println(map.size());
println(map.keySet());
println(map.values());
println(map.count);
println(map);
println("-----------------------------------------");
var map2 = new Map();
map2.putAll(map);
println(map2);
map2.remove("gender");
println(map2);
println(map2.size());
println(map2.containsKey("name"));
println(map2.containsValue("jack"));
map2.clear();
println(map2);
println(map2.size());
println(map2.containsKey("name"));
println(map2.containsValue("jack"));
}
</script>
</head>
<body>
</body>
</html>
结果:
jack
false
jack
[name,age,gender]
[jack,28,male]
{name:jack,age:28,gender:male}
-----------------------------------------
{name:jack,age:28,gender:male}
{name:jack,age:28}
true
true
{}
false
false