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