IE8以下,不存在map对象

前言:

关于前端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 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_33172029/article/details/82595425