IE8支持javascript .map()函数吗?

当这样做时:

var a = new Array("a", "b"); a.map(function() { }); 

在IE8中我得到:

 "Object doesn't support this property or method" 

这种方法不支持IE8,或者我有其他一些问题? 我有一个谷歌,但得到大量的谷歌地图的JavaScript问题/问题…

编辑 :确定IE8及以下不支持.map()函数。 从MDN复制粘贴代码,如果不是本地支持的(这看起来完美无缺),那么将根据规范精确地将.map()函数添加到Array原型。

IE8不支持map() 。 如有疑问,请查看MDN(Mozilla开发者networking):

地图 – MDN

看起来IE在版本9中增加了对map()支持。

解决scheme是jQuery.map

而不是: a.map(function( ) { });

你必须做

jQuery.map(a, function( ) { //what ever you want todo .. }

 (function(fn){ if (!fn.map) fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)r.push(f(this[i]));return r} if (!fn.filter) fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(f(this[i]))r.push(this[i]);return r} })(Array.prototype); 

放在第一个.map或.filter调用之前的任何地方。 问题解决了。 jQuery.map()方法不能按预期方式工作。

更新:我刚才testing稀疏数组:如果映射或filter参数是一个函数接受和处理undefined值 – 它的作品,但结果并不明显:

我们来定义testing稀疏数组:

 var t = [] t[1] = 1; t[3] = 3; t[5] = 5; 

让我们来看看IE8对t的说法: “[undefined,1,undefined,3,undefined,5]”

咱们试试吧:

 t.filter(function(x){return x<4}) 

什么是IE8? 这是: “[1,3]” 。 注 – 没有未定义的值。 我个人会期待这一点。

但是试试这个:

 t.map(function(x){return 2<<x}) 

而且…… “[2,4,2,16,2,64]” 。 这很奇怪! :) 尝试这个:

 t.map(function(x){return Math.pow(2,x)}) 

而且…? “[NaN,2,NaN,8,NaN,32]” – 我宁愿期待这个结果进行前面的testing。 这至less是合乎逻辑的 – Math.pow()应该返回一个numbertypes, NaN ,不pipe它是什么意思是一个特殊的numbertypes为无效操作保留。 所以结果或多或less是正确的。 如果t仍然是一个稀疏数组,那么这将是完全正确的。

所以没有更多的东西 – 最终正确版本的mapfilter方法

 (function(fn){ if (!fn.map) fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)if(this[i]!==undefined)r[i]=f(this[i]);return r} if (!fn.filter) fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(this[i]!==undefined&&f(this[i]))r[i]=this[i];return r} })(Array.prototype); 

和testing:

 var t = []; t[1] = 1; t[3] = 3; t[5] = 5; var t1 = t.map(function(x){return 2<<x}); var t2 = t.filter(function(x){return x<10}); console.debug(t); console.debug(t1); console.debug(t2); 

预期成绩:

[object Array] [undefined,1,undefined,3,undefined,5]

[object Array] [undefined,4,undefined,16,undefined,64]

[object Array] [undefined,1,undefined,3,undefined,5]

MDN表示,IE 9支持它。 没有提到IE 8。

在这里输入图像说明

在MSDN上,它说在映射的要求:不支持在以下文档模式:怪癖,Internet Explorer 6标准,Internet Explorer 7标准,Internet Explorer 8标准。

Map只是数组“访问者”模式的一个实现。 所以很容易替代它可能是:

 function visitArray(arr, visitor) { var result = []; for (var i = 0; i < arr.length; i ++) { result[i] = visitor(arr[i]); } return result; } 

该函数还需要调用每个数组元素的数组和函数。 它将为每个原始数组元素返回一个访问者调用结果的新数组