1、前言
自己对JS的了解也不是很深入。最近看了一个视频,讲述JS的深入用法,感觉很有意思,就选择里面的一个小Demo(模拟Map容器)来体会一下JS的强大之处。
2、思想
主要使用JS中对象的特殊性,使用obj[key]=value的特性,来完成Map容器的K-V存储、获取、修改、删除、判断、遍历等。
3、JS代码解释及分析
//模拟Map集合
function Map(){
var obj = {};
//添加put方法
this.put = function(key,value){
obj[key] = value;
console.log("添加数据成功:" + key + "--" + value);
}
//添加get方法
this.get = function(key){
return obj[key];
}
//添加删除方法
this.remove = function(key){
delete obj[key];
console.log("删除数据成功:" + key );
}
//添加容器长度
this.size = function(){
var count = 0;
for(var attr in obj){
count++;
}
return count;
}
//添加是否包含的key的方法
this.contains = function(key){
var flag = false;
for(var k in obj){
if(key == k){
flag = true;
}
}
return flag;
}
//判断容器是否为空
this.isEmpty = function(){
if(this.size() == 0){
return true;
}
return false;
}
//遍历map
this.each = function(){
for(var k in obj){
console.log(k + "--" + this.get(k));
}
}
}
/**
程序的关键在此处开始。JS中使用的new关键字,但是并非和java中的对象一样。
java对象是有构造函数的,而JS中没有。function Map()貌似像Map的构造函数,其实
不然,只不过是一个普通函数,Map()就是为了调用function Map()的。所以Map也可
以改成其他名称。
new关键字只是创建后后面函数对应的一个对象,然后使用变量接收。详细的new解释
可以参照:http://www.cnblogs.com/onepixel/p/5043523.html
*/
var map = new Map();
//控制台结果输出
console.log("集合是否为空:" + map.isEmpty());
map.put("1","judy");
map.put("2","lucy");
map.put("3","lily");
console.log("集合是否为空:" + map.isEmpty());
console.log("查询key为2的值" + map.get("2"));
map.put("2","擎天柱");
console.log("修改key为2的值为擎天柱");
console.log("查询key为2的值" + map.get("2"));
map.remove("2");
console.log("查询key为2的值" + map.get("2"));
console.log("map集合的长度为:" + map.size());
console.log("map集合是否包含key为1和4:" + map.contains("1") + "," + map.contains("4"));
map.each();
4、结果验证
集合是否为空:true
添加数据成功:1--judy
添加数据成功:2--lucy
添加数据成功:3--lily
集合是否为空:false
查询key为2的值lucy
添加数据成功:2--擎天柱
修改key为2的值为擎天柱
查询key为2的值擎天柱
删除数据成功:2
查询key为2的值undefined
map集合的长度为:2
map集合是否包含key为1和4:true,false
1--judy
3--lily