前言:
关于前端map对象的简单说明,它跟我们平时JAVA对象的思想基本一样,具体可以参考文档:MAP对象
问题情况:
但是,这个这么好用的对象,并不是在所有浏览器,或者所有不同版本的浏览器上,所特有的。
目前,我遇到的是,谷歌,火狐,IE10,IE11都内置有map对象,但是IE8却没有...(忧伤)
就是因为,这个对象比较强大,在某些情况下,需要用到,所以看情况而定吧。
代码:(可以直接复制使用,该代码也是参考其他网上资料而得,不过我做了修改,因为语法问题,之前网上部分map插件是不能用的,譬如,部分方法名不能使用特殊字符,像:delete,因为在ie上,会有问题)
/**
* 为了兼容ie,ie10以下没有map对象
* @returns
*/
// 判读是否为IE浏览器
function isIE() {
return navigator.appName == "Microsoft Internet Explorer";
}
// 判断IE版本
function IEVersion() {
return parseInt(navigator.appVersion.split(";")[1].replace(/[ ]/g, "").replace("MSIE",""));
}
function MyMap() {
this.elements = new Array();
// 获取Map元素个数
MyMap.prototype.size = function() {
return this.elements.length;
},
// 判断Map是否为空
MyMap.prototype.isEmpty = function() {
return (this.elements.length < 1);
},
// 删除Map所有元素
MyMap.prototype.clear = function() {
this.elements = new Array();
},
// 向Map中增加元素(key, value)
MyMap.prototype.put = function(_key, _value) {
if (this.containsKey(_key) == true) {
if (this.containsValue(_value)) {
if (this.remove(_key) == true) {
this.elements.push({
key : _key,
value : _value
});
}
} else {
this.elements.push({
key : _key,
value : _value
});
}
} else {
this.elements.push({
key : _key,
value : _value
});
}
},
// 向Map中增加元素(key, value)
MyMap.prototype.set = function(_key, _value) {
if (this.containsKey(_key) == true) {
if (this.containsValue(_value)) {
if (this.remove(_key) == true) {
this.elements.push({
key : _key,
value : _value
});
}
} else {
this.elements.push({
key : _key,
value : _value
});
}
} else {
this.elements.push({
key : _key,
value : _value
});
}
},
// 删除指定key的元素,成功返回true,失败返回false
MyMap.prototype.remove = 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;
},
// 删除指定key的元素,成功返回true,失败返回false
MyMap.prototype.deleteBykey = 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;
},
// 获取指定key的元素值value,失败返回null
MyMap.prototype.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 null;
}
}
// set指定key的元素值value
MyMap.prototype.setValue = function(_key, _value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
this.elements[i].value = _value;
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
},
// 获取指定索引的元素(使用element.key,element.value获取key和value),失败返回null
MyMap.prototype.element = function(_index) {
if (_index < 0 || _index >= this.elements.length) {
return null;
}
return this.elements[_index];
},
// 判断Map中是否含有指定key的元素
MyMap.prototype.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中是否含有指定key的元素
MyMap.prototype.has = 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的元素
MyMap.prototype.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中所有key的数组(array)
MyMap.prototype.keys = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key);
}
return arr;
},
// 获取Map中所有value的数组(array)
MyMap.prototype.values = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].value);
}
return arr;
},
//map遍历数组
//@param callback [function] 回调函数;
//@param context [object] 上下文;
MyMap.prototype.forEach = function forEach(callback,context){
context = context || window;
//IE6-8下自己编写回调函数执行的逻辑
var newAry = new Array();
for(var i = 0; i < this.elements.length;i++) {
if(typeof callback === 'function') {
var val = callback.call(context,this.elements[i].value,this.elements[i].key,this.elements);
newAry.push(this.elements[i].value);
}
}
return newAry;
}
}
如有不足,请留言交流,谢谢!
扫描二维码关注公众号,回复:
3174041 查看本文章