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

用js写一个实现map

2015-08-13 15:46 639 查看
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>无标题文档</title>

<script language="javascript">

Array.prototype.remove = function(s) {

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

if (s == this[i])

this.splice(i, 1);

}

}

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);

}

</script>

</head>

<body onload="testMap()">

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: