1. 程式人生 > 其它 >修改IE不相容MAP()的問題,自定義實現JavaScript的Map物件

修改IE不相容MAP()的問題,自定義實現JavaScript的Map物件

由於IE8及以下版本不支援Map物件,本文為程式猿們提供了有效的解決方法。

 

// 判讀是否為IE瀏覽器
function isIE() {
    return navigator.appName == "Microsoft Internet Explorer";
}

// 判斷IE版本
function IEVersion() {
    return parseInt(navigator.appVersion.split(";")[1].replace(/[ ]/g, "").replace("MSIE",""));
}

 

 

 

本文重寫了Map物件,實現了常用的set, get, put, clear, remove, delete, forEach, has, containsKey, isEmpty, size 等方法,使用和宣告的方試和正常宣告Map物件一樣:

 

var map = new Map();

 

該段程式碼是由碼工具網(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; } }