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

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


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

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

var map = new Map();

只需将下面代码拷入中即可。

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

[javascript] view plain copy
  1. function Map() {  
  2.         this.elements = new Array();  
  3.         // 获取Map元素个数  
  4.         this.size = function() {  
  5.             return this.elements.length;  
  6.         },  
  7.         // 判断Map是否为空  
  8.         this.isEmpty = function() {  
  9.             return (this.elements.length < 1);  
  10.         },  
  11.         // 删除Map所有元素  
  12.         this.clear = function() {  
  13.             this.elements = new Array();  
  14.         },  
  15.         // 向Map中增加元素(key, value)  
  16.         this.put = function(_key, _value) {  
  17.             if (this.containsKey(_key) == true) {  
  18.                 if (this.containsValue(_value)) {  
  19.                     if (this.remove(_key) == true) {  
  20.                         this.elements.push({  
  21.                             key : _key,  
  22.                             value : _value  
  23.                         });  
  24.                     }  
  25.                 } else {  
  26.                     this.elements.push({  
  27.                         key : _key,  
  28.                         value : _value  
  29.                     });  
  30.                 }  
  31.             } else {  
  32.                 this.elements.push({  
  33.                     key : _key,  
  34.                     value : _value  
  35.                 });  
  36.             }  
  37.         },  
  38.         // 向Map中增加元素(key, value)  
  39.         this.set = function(_key, _value) {  
  40.             if (this.containsKey(_key) == true) {  
  41.                 if (this.containsValue(_value)) {  
  42.                     if (this.remove(_key) == true) {  
  43.                         this.elements.push({  
  44.                             key : _key,  
  45.                             value : _value  
  46.                         });  
  47.                     }  
  48.                 } else {  
  49.                     this.elements.push({  
  50.                         key : _key,  
  51.                         value : _value  
  52.                     });  
  53.                 }  
  54.             } else {  
  55.                 this.elements.push({  
  56.                     key : _key,  
  57.                     value : _value  
  58.                 });  
  59.             }  
  60.         },  
  61.         // 删除指定key的元素,成功返回true,失败返回false  
  62.         this.remove = function(_key) {  
  63.             var bln = false;  
  64.             try {  
  65.                 for (i = 0; i < this.elements.length; i++) {  
  66.                     if (this.elements[i].key == _key) {  
  67.                         this.elements.splice(i, 1);  
  68.                         return true;  
  69.                     }  
  70.                 }  
  71.             } catch (e) {  
  72.                 bln = false;  
  73.             }  
  74.             return bln;  
  75.         },  
  76.   
  77.         // 删除指定key的元素,成功返回true,失败返回false  
  78.         this.delete = function(_key) {  
  79.             var bln = false;  
  80.             try {  
  81.                 for (i = 0; i < this.elements.length; i++) {  
  82.                     if (this.elements[i].key == _key) {  
  83.                         this.elements.splice(i, 1);  
  84.                         return true;  
  85.                     }  
  86.                 }  
  87.             } catch (e) {  
  88.                 bln = false;  
  89.             }  
  90.             return bln;  
  91.         },  
  92.           
  93.         // 获取指定key的元素值value,失败返回null  
  94.         this.get = function(_key) {  
  95.             try {  
  96.                 for (i = 0; i < this.elements.length; i++) {  
  97.                     if (this.elements[i].key == _key) {  
  98.                         return this.elements[i].value;  
  99.                     }  
  100.                 }  
  101.             } catch (e) {  
  102.                 return null;  
  103.             }  
  104.         },  
  105.   
  106.         // set指定key的元素值value  
  107.         this.setValue = function(_key, _value) {  
  108.             var bln = false;  
  109.             try {  
  110.                 for (i = 0; i < this.elements.length; i++) {  
  111.                     if (this.elements[i].key == _key) {  
  112.                         this.elements[i].value = _value;  
  113.                         return true;  
  114.                     }  
  115.                 }  
  116.             } catch (e) {  
  117.                 bln = false;  
  118.             }  
  119.             return bln;  
  120.         },  
  121.   
  122.         // 获取指定索引的元素(使用element.key,element.value获取key和value),失败返回null  
  123.         this.element = function(_index) {  
  124.             if (_index < 0 || _index >= this.elements.length) {  
  125.                 return null;  
  126.             }  
  127.             return this.elements[_index];  
  128.         },  
  129.   
  130.         // 判断Map中是否含有指定key的元素  
  131.         this.containsKey = function(_key) {  
  132.             var bln = false;  
  133.             try {  
  134.                 for (i = 0; i < this.elements.length; i++) {  
  135.                     if (this.elements[i].key == _key) {  
  136.                         bln = true;  
  137.                     }  
  138.                 }  
  139.             } catch (e) {  
  140.                 bln = false;  
  141.             }  
  142.             return bln;  
  143.         },  
  144.   
  145.         // 判断Map中是否含有指定key的元素  
  146.         this.has = function(_key) {  
  147.             var bln = false;  
  148.             try {  
  149.                 for (i = 0; i < this.elements.length; i++) {  
  150.                     if (this.elements[i].key == _key) {  
  151.                         bln = true;  
  152.                     }  
  153.                 }  
  154.             } catch (e) {  
  155.                 bln = false;  
  156.             }  
  157.             return bln;  
  158.         },  
  159.           
  160.         // 判断Map中是否含有指定value的元素  
  161.         this.containsValue = function(_value) {  
  162.             var bln = false;  
  163.             try {  
  164.                 for (i = 0; i < this.elements.length; i++) {  
  165.                     if (this.elements[i].value == _value) {  
  166.                         bln = true;  
  167.                     }  
  168.                 }  
  169.             } catch (e) {  
  170.                 bln = false;  
  171.             }  
  172.             return bln;  
  173.         },  
  174.   
  175.         // 获取Map中所有key的数组(array)  
  176.         this.keys = function() {  
  177.             var arr = new Array();  
  178.             for (i = 0; i < this.elements.length; i++) {  
  179.                 arr.push(this.elements[i].key);  
  180.             }  
  181.             return arr;  
  182.         },  
  183.   
  184.         // 获取Map中所有value的数组(array)  
  185.         this.values = function() {  
  186.             var arr = new Array();  
  187.             for (i = 0; i < this.elements.length; i++) {  
  188.                 arr.push(this.elements[i].value);  
  189.             }  
  190.             return arr;  
  191.         };  
  192.           
  193.         /** 
  194.         * map遍历数组 
  195.         * @param callback [function] 回调函数; 
  196.         * @param context [object] 上下文; 
  197.         */  
  198.         this.forEach = function forEach(callback,context){  
  199.             context = context || window;  
  200.               
  201.             //IE6-8下自己编写回调函数执行的逻辑  
  202.             var newAry = new Array();  
  203.             for(var i = 0; i < this.elements.length;i++) {  
  204.                 if(typeof  callback === 'function') {  
  205.                     var val = callback.call(context,this.elements[i].value,this.elements[i].key,this.elements);  
  206.                     newAry.push(this.elements[i].value);  
  207.                 }  
  208.             }  
  209.             return newAry;  
  210.         }  
  211.   
  212.     } 

你可能感兴趣的:(javascript)