js模拟Map

    最近在学习js的知识时,遇到一个问题,用js来模拟java代码中的Map实现,看到别人实现了其中的put和get方法,于是决定在这个基础上继续实现一些通用的方法,下面贴出代码,基础有限,如果有更好的实现方式,欢迎一起讨论。

/**
 * 模拟Map键值对
 * author pk
 */
function Map(){
	
	var obj = {};
	
	//clear清空map
	this.clear = function(){
		for(key in obj){
			if(obj.hasOwnProperty(key)){
				delete obj[key];
			}
		}
	};
	
	//往map里存放键值对
	this.put = function(key, val){
		obj[key] = val;
	};
	
	//返回map键值对的个数
	this.size = function(){
		var count = 0;
		for(key in obj){
			if(obj.hasOwnProperty(key)){
				count++;
			}
		}
		return count;
	};
	
	//判断map是否为空
	this.isEmpty = function(){
		return this.size === 0;
	};
	
	//判断是否含有某个key
	this.containsKey = function(key){
		return obj[key] !== undefined;
	};
	
	//判断是否含有某个value
	this.containsValue = function(val){
		for(key in obj){
			if(obj.hasOwnProperty(key)){
				if(obj[key] === val){
					return true;
				}
			}
		}
		return false;
	};
	
	//获取指定key对应的value
	this.get = function(key){
		//如果key不存在,则返回null
		if(obj[key] === undefined){
			return null;
		}
		return obj[key];
	};
	
	//删除指定key对应的键值对,并返回其val
	this.remove = function(key){
		var temp = undefined;
		temp = this.get(key);
		delete obj[key];
		return temp;
	};
	
	//返回map的键值集合
	this.keys = function(){
		var temp = [];
		for(key in obj){
			if(obj.hasOwnProperty(key)){
				temp.push(key);
			}
		}
		return temp;
	};
	
	//打印map
	this.toString = function(){
		var keyArr = this.keys();
		if(keyArr.length === 0){
			return '{}';
		}else{
			var str = '{';
			keyArr.forEach(function(item, index, arr){
				if(index < arr.length - 1){
					str += item + '=' + obj[item] + ',';
				}else{
					str += item + '=' + obj[item];
				}
			})
			str += '}';
			return str;
		}
	};
	
}



转载于:https://my.oschina.net/tracypk/blog/358376

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值