JS自定义一个Map类实例源码介绍



JS自定义一个Map类实例源码介绍。

例子1

//定义简单Map

function getMap() {//初始化map_,给map_对象增加方法,使map_像Map

var map_ = new Object();

map_.put = function(key, value) {

map_[key+'_'] = value;

};

map_.get = function(key) {

return map_[key+'_'];

};

map_.remove = function(key) {

delete map_[key+'_'];

};

map_.keyset = function() {

var ret = “”;

for(var p in map_) {

if(typeof p == ‘string’ && p.substring(p.length-1) == “_”) {

ret += “,”;

ret += p.substring(0,p.length-1);

}

}

if(ret == “”) {

return ret.split(“,”);

} else {

return ret.substring(1).split(“,”);

}

};

return map_;

}

var map = getMap();

map.put(“395″,”12,21,52,89,35″);

map.put(“396″,”121111,2222221,5333332,8444449,3555555″);

alert(map.get(“395″));//输出:12,21,52,89,35

alert(map.keyset()); //输出:395,396

 

 

例子2

 

function HashMap(){

this.map = {};

}

HashMap.prototype = {

put : function(key , value){

this.map[key] = value;

},

get : function(key){

if(this.map.hasOwnProperty(key)){


return this.map[key];

}

return null;

},

remove : function(key){

if(this.map.hasOwnProperty(key)){

return delete this.map[key];

}

return false;

},

removeAll : function(){

this.map = {};

},

keySet : function(){

var _keys = [];

for(var i in this.map){

_keys.push(i);

}

return _keys;

}

};

HashMap.prototype.constructor = HashMap;

var hashMap = new HashMap();

hashMap.put(‘key’ ,’value’);

hashMap.put(‘key1′ ,’value’);

console.log(hashMap.get(‘key’));

console.log(hashMap.keySet());

console.log(hashMap.remove(‘key’));

console.log(hashMap.keySet());


例子3

function Map() {
this.elements = new Array();

//获取MAP元素个数
this.size = function() {
return this.elements.length;
};

//判断MAP是否为空
this.isEmpty = function() {
return (this.elements.length < 1);
};

//删除MAP所有元素
this.clear = function() {
this.elements = new Array();
};

//向MAP中增加元素(key, value)
this.put = function(_key, _value) {
this.elements.push( {
key : _key,
value : _value
});
};

//删除指定KEY的元素,成功返回True,失败返回False
this.removeByKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
};

//删除指定VALUE的元素,成功返回True,失败返回False
this.removeByValue = function(_value) {//removeByValueAndKey
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
};

//删除指定VALUE的元素,成功返回True,失败返回False
this.removeByValueAndKey = function(_key,_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && this.elements[i].key == _key) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
};

//获取指定KEY的元素值VALUE,失败返回NULL
this.get = function(_key) {
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
return this.elements[i].value;
}
}
} catch (e) {
return false;
}
return false;
};

//获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
this.element = function(_index) {
if (_index < 0 || _index >= this.elements.length) {
return null;
}
return this.elements[_index];
};

//判断MAP中是否含有指定KEY的元素
this.containsKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
};

//判断MAP中是否含有指定VALUE的元素
this.containsValue = function(_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
};

//判断MAP中是否含有指定VALUE的元素
this.containsObj = function(_key,_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && this.elements[i].key == _key) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
};

//获取MAP中所有VALUE的数组(ARRAY)
this.values = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].value);
}
return arr;
};

//获取MAP中所有VALUE的数组(ARRAY)
this.valuesByKey = function(_key) {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
arr.push(this.elements[i].value);
}
}
return arr;
};

//获取MAP中所有KEY的数组(ARRAY)
this.keys = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key);
}
return arr;
};

//获取key通过value
this.keysByValue = function(_value) {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
if(_value == this.elements[i].value){
arr.push(this.elements[i].key);
}
}
return arr;
};

//获取MAP中所有KEY的数组(ARRAY)
this.keysRemoveDuplicate = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
var flag = true;
for(var j=0;j<arr.length;j++){
if(arr[j] == this.elements[i].key){
flag = false;
break;
}
}
if(flag){
arr.push(this.elements[i].key);
}
}
return arr;
};
}