上午有些闲着无聊,写点js打发时间,偶然想到原生javascript中并没有Map这种数据类型,就自己动手写了个简单的Map类,也许自己以后会用的上,使用时把下面这个JS文件导入,然后 var map = new Map()就可以了
(
function(){
var obj = {};
Map = function(){
}
/**
*将指定的值与此映射中的指定键关联
* @param {Object} key
* @param {Object} value
*/
Map.prototype.put = function(key,value){
if(key){
obj[key] = value;
}
}
/**
*
* 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
*/
Map.prototype.get = function(key){
if(key){
return obj[key];
}else{
return null;
}
}
/**
*从此映射中移除所有映射关系
*/
Map.prototype.clear = function(){
obj = {};
}
/**
*返回此映射中的键-值映射关系数
*/
Map.prototype.size = function(){
var size = 0;
for(var i in obj){
size++;
}
return size;
}
/**
* 返回此映射中所包含的键的 视图
*/
Map.prototype.keySet = function(){
var key = [];
for(var i in obj){
key.push(i);
}
return key;
}
/**
*返回此映射中所包含的值的 视图
*/
Map.prototype.valueSet = function(){
var value = [];
for(var i in obj){
value.push(obj[i]);
}
return value;
}
/**
*从此映射中移除指定键的映射关系(如果存在)。
*/
Map.prototype.remove = function(key){
if(key){
delete obj[key];
}
}
/**
*如果此映射不包含键-值映射关系,则返回 true
*/
Map.prototype.isEmpty = function(){
return this.size() ==0;
}
/**
*如果此映射包含指定键的映射关系,则返回 true。
* @param {Object} key
*/
Map.prototype.containsKey = function(key){
if(key){
for(var i in obj){
if(i === key){
return true;
}
}
}
return false;
}
/**
*如果此映射将一个或多个键映射到指定值,则返回 true。
* @param {Object} key
*/
Map.prototype.containsValue = function(value){
if(value){
for(var i in obj){
if(obj[i] === value){
return true;
}
}
}
return false;
}
/**
* 从指定映射中将所有映射关系复制到此映射中
* @param {Object} anOtherMap
*/
Map.prototype.putAll = function(anOtherMap){
if(anOtherMap){
for(var i in anOtherMap){
this.put(i,anOtherMap[i]);
}
}
}
Map.prototype.toString = function(){
var str = "{";
for(var i in obj){
str += (i + ":" + obj[i] + ",")
}
if(str.lastIndexOf(",") != -1){
str = str.substr(0,str.lastIndexOf(","));
}
str += "}"
return str;
}
}
)();