美文网首页
ie8不支持 js map 方法 解决方案

ie8不支持 js map 方法 解决方案

作者: 晓丽_c080 | 来源:发表于2019-07-02 10:21 被阅读0次

修改IE不兼容MAP()的问题,自定义实现JavaScript的Map对象

由于IE8及以下版本不支持Map对象,本文为程序猿们提供了有效的解决方法。

本文重写了Map对象,实现了常用的set, get, put, clear, remove, delete, forEach, has, containsKey, isEmpty, size 等方法,使用和声明的方试和正常声明Map对象一样:

var map = new Map();

只需将下面代码拷入<script type="text/javascript"></script>中即可。

该段代码是由码工具网(http://matools.com)提供,实现Map对象的代码如下,仅供参考:

function Map() {

        this.elements = new Array();

        // 获取Map元素个数

        this.size = function() {

            return this.elements.length;

        },

        // 判断Map是否为空

        this.isEmpty = function() {

            return (this.elements.length < 1);

        },

        // 删除Map所有元素

        this.clear = function() {

            this.elements = new Array();

        },

        // 向Map中增加元素(key, value)

        this.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)

        this.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

        this.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

        this.delete = 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

        this.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

        this.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

        this.element = function(_index) {

            if (_index < 0 || _index >= this.elements.length) {

                return null;

            }

            return this.elements[_index];

        },

        // 判断Map中是否含有指定key的元素

        this.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的元素

        this.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的元素

        this.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)

        this.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)

        this.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] 上下文;

        */

        this.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;

        }

    }

相关文章

网友评论

      本文标题:ie8不支持 js map 方法 解决方案

      本文链接:https://www.haomeiwen.com/subject/dpqzmqtx.html