A5下载文章资讯

分类分类

JavaScript中实现Map的示例代码

2015-09-09 16:09作者:yezheng

 不废话了,直接贴代码了。

代码一:

var map=new Map();

map.put("a","A");map.put("b","B");map.put("c","C");

map.get("a"); //返回:A

map.entrySet() // 返回Entity[{key,value},{key,value}]

map.containsKey('kevin') //返回:false

function Map() {

this.keys = new Array();

this.data = new Object();

/**

* 放入一个键值对

* @param {String} key

* @param {Object} value

*/

this.put = function(key, value) {

if(this.data[key] == null){

this.keys.push(key);

this.data[key] = value;

}else{

this.data[key]=this.data[key];

}

return true;

};

/**

* 获取某键对应的值

* @param {String} key

* @return {Object} value

*/

this.get = function(key) {

return this.data[key];

};

/**

* 删除一个键值对

* @param {String} key

*/

this.remove = function(key) {

for(var i=0;i<this.keys.length;i++){

if(key===this.keys[i]){

var del_keys= this.keys.splice(i,1);

for(k in del_keys){

this.data[k] = null;

}

return true;

}

}

return false;

};

/**

* 遍历Map,执行处理函数

*

* @param {Function} 回调函数 function(key,value,index){..}

*/

this.each = function(fn){

if(typeof fn != 'function'){

return;

}

var len = this.keys.length;

for(var i=0;i<len;i++){

var k = this.keys[i];

fn(k,this.data[k],i);

}

};

/**

* 获取键值数组

* @return entity[{key,value},{key,value}]

*/

this.entrySet = function() {

var len = this.keys.length;

var entrys = new Array(len);

for (var i = 0; i < len; i++) {

entrys[i] = {

key : this.keys[i],

value : this.data[this.keys[i]]

};

}

return entrys;

};

/**

* 判断Map是否为空

*/

this.isEmpty = function() {

return this.keys.length == 0;

};

/**

* 获取键值对数量

*/

this.size = function(){

return this.keys.length;

};

this.containsKey=function(key){

return this.keys.filter(function(v){

if(v===key){

return key;

}

}).length>0;

};

/**

* 重写toString

*/

this.toString = function(){

var s = "{";

for(var i=0;i<this.keys.length;i++){

var k = this.keys[i];

s += k+"="+this.data[k];

if(this.keys.length>i+1){

s+=','

}

}

s+="}";

return s;

};

/**

* 解析字符串到Map

* {a=A,b=B,c=B,}

*/

this.parserStringAndAddMap=function(str){

var count=0;

if(str && str.length>0){

str=str.trim();

var startIndex=str.indexOf("{"),endIndex=str.lastIndexOf("}");

if(startIndex!==-1 && endIndex!==-1){

str=str.substring(startIndex+1,endIndex);

var arrs= str.split(",");

for(var i=0;i<arrs.length;i++){

var kv=arrs[i].trim();

if(kv.length>0 && kv.indexOf("=")!==-1){

var kv_arr=kv.split("=");

if(kv_arr.length==2){

if(this.put(kv_arr[0].trim(),kv_arr[1].trim())){

count++;

}else{

console.error('error: kv:'+kv);

}

}

}

}

}else{

console.log("data error:"+str);

}

}else{

console.log('data is not empty');

}

return count;

};

}

代码二:

Array.prototype.remove = function(s) {

for (var i = 0; i < this.length; i++) {

if (s == this[i])

this.splice(i, 1);

}

}

/**

* Simple Map

*

*

* var m = new Map();

* m.put('key','value');

* ...

* var s = "";

* m.each(function(key,value,index){

* s += index+":"+ key+"="+value+"n";

* });

* alert(s);

*

* @author dewitt

* @date 2008-05-24

*/

function Map() {

/** 存放键的数组(遍历用到) */

this.keys = new Array();

/** 存放数据 */

this.data = new Object();

/**

* 放入一个键值对

* @param {String} key

* @param {Object} value

*/

this.put = function(key, value) {

if(this.data[key] == null){

this.keys.push(key);

}

this.data[key] = value;

};

/**

* 获取某键对应的值

* @param {String} key

* @return {Object} value

*/

this.get = function(key) {

return this.data[key];

};

/**

* 删除一个键值对

* @param {String} key

*/

this.remove = function(key) {

this.keys.remove(key);

this.data[key] = null;

};

/**

* 遍历Map,执行处理函数

*

* @param {Function} 回调函数 function(key,value,index){..}

*/

this.each = function(fn){

if(typeof fn != 'function'){

return;

}

var len = this.keys.length;

for(var i=0;i<len;i++){

var k = this.keys[i];

fn(k,this.data[k],i);

}

};

/**

* 获取键值数组(类似Java的entrySet())

* @return 键值对象{key,value}的数组

*/

this.entrys = function() {

var len = this.keys.length;

var entrys = new Array(len);

for (var i = 0; i < len; i++) {

entrys[i] = {

key : this.keys[i],

value : this.data[i]

};

}

return entrys;

};

/**

* 判断Map是否为空

*/

this.isEmpty = function() {

return this.keys.length == 0;

};

/**

* 获取键值对数量

*/

this.size = function(){

return this.keys.length;

};

/**

* 重写toString

*/

this.toString = function(){

var s = "{";

for(var i=0;i<this.keys.length;i++,s+=','){

var k = this.keys[i];

s += k+"="+this.data[k];

}

s+="}";

return s;

};

}

function testMap(){

var m = new Map();

m.put('key1','Comtop');

m.put('key2','南方电网');

m.put('key3','景新花园');

alert("init:"+m);

m.put('key1','康拓普');

alert("set key1:"+m);

m.remove("key2");

alert("remove key2: "+m);

var s ="";

m.each(function(key,value,index){

s += index+":"+ key+"="+value+"n";

});

alert(s);

}

以上内容通过两段代码给大家分享了JavaScript中实现Map,希望大家喜欢。

展开全部

相关

说两句网友评论
    我要跟贴
    取消