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 = 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
if(arr[j] == this.elements[i].key){
flag = false;
break;
}
}
if(flag){
arr.push(this.elements[i].key);
}
}
return arr;
};
}


第二種好用,本人推薦使用第二種

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *