js中的Map使用
js里面没有map,用object[key]=value,自己写map方法。
// js中没有map,写一个,提供了remove、put、get、clean、each、entrys、isEmty、toString、size方法。并给了使用例子。使用时,放置项目js文件中即可。 function Map() { /* * 找到元素位置,删除元素 * */ Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index > -1) { this.splice(index, 1); } }; /* indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 stringObject.indexOf(searchvalue,fromindex) searchvalue 必需。规定需检索的字符串值。 fromindex 可选的整数参数。规定在字符串中开始检索的位置。 它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。 */ /* splice使用 返回被删除/改变的原数组 arrayObject.splice(index,howmany,item1,.....,itemX) index 必需。 整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 howmany 必需。 要删除的项目数量。如果设置为 0,则不会删除项目。 item1, ..., itemX 可选。向数组添加的新项目。 */ /** 存放键的数组(遍历用到) */ this.keys = new Array(); /** 存放数据 */ this.data = new Object(); /** * 使用data[k] = v,存储数据。 */ this.put = function(k, v) { if(this.data[k] == null){ this.keys.push(k); } this.data[k] = v; }; /** * 通过k获取v */ this.get = function(k) { return this.data[k]; }; /** * 通过key删除键值 */ this.remove = function(k) { this.keys.remove(k); this.data[k] = null; }; /** * 遍历Map,执行处理函数 * @param {Function} 回调函数 function(k,v,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[len-1-i]; fn(k,this.data[k],i); } }; /** * 获取键值对数组 */ this.entrys = function() { var len = this.keys.length; var entrys = new Array(len); for (var i = 0; i < len; i++) { entrys[i] = { k : this.keys[i], v : this.data[this.keys[i]] }; } return entrys; }; /** * isEmpty */ this.isEmpty = function() { return this.keys.length == 0; }; /** * size */ 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]+'"'; } if(s.length>1){ //去掉多添加的一个逗号 s = s.substring(0,s.length-1); } s+="}"; return s; }; /** * clean */ this.clean = function(){ this.keys = new Array(); this.data = new Object(); } } var m = new Map(); m.put(1,3); m.put(2,4); m.each(function(k,v,index){ console.log("i"+index); console.log("k"+k); console.log("v"+v); }); console.log(m.entrys());