您的位置:首页 > Web前端 > JavaScript

JS自定义一个Map类

2015-04-20 13:59 357 查看
例子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;

};

}


第二种好用,本人推荐使用第二种
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: