使用JS模拟Map容器

152 阅读2分钟

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为14true,false
1--judy
3--lily