在js写一个Map

是复制
的文章,作者很厉害啊!我要多多学习,加油!!!

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值