这样做时:
var a = new Array("a", "b");
a.map(function() { });
在IE8中我得到了:
"Object doesn't support this property or method"
IE8中不支持此方法,还是有其他问题?我有一个谷歌,但获得了很多谷歌地图的JavaScript问题/问题......
编辑:确定IE8及以下版本不支持.map()函数。复制粘贴来自MDN here的代码,如果没有本机支持,它将完全根据规范将.map()函数添加到Array原型中(并且它似乎完美地工作)。
答案 0 :(得分:43)
解决方案是jQuery.map
而不是:
a.map(function( ) { });
你必须做
jQuery.map(a, function( ) {
//what ever you want todo ..
}
答案 1 :(得分:40)
答案 2 :(得分:21)
(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()方法无法按预期工作。
<强>更新强>
我刚刚在稀疏数组上测试它:如果map或filter参数是一个接受并处理undefined
值的函数 - 它可以工作,但结果并不明显:
让我们定义测试稀疏数组:
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,6,6]”。那真是怪了! :)试试这个:
t.map(function(x){return Math.pow(2,x)})
并且?... “[NaN,2,NaN,8,NaN,32]” - 我希望这个结果可以用于之前的测试。它至少是逻辑的 - Math.pow()应该返回number
类型NaN
,不管它是什么意思是为无效操作保留的特殊number
类型。所以结果或多或少是正确的。如果t仍然是稀疏数组,那么它将完全正确map
结果。
所以没有进一步的麻烦 - 最终正确版本的map
和filter
方法:
(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);
测试:
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]
答案 3 :(得分:7)
MDN说IE 9支持它。没有提到IE 8。
答案 4 :(得分:0)
Map只是数组“访问者”模式的一种实现。如此简单的替代品可能是:
function visitArray(arr, visitor) {
var result = [];
for (var i = 0; i < arr.length; i ++) {
result[i] = visitor(arr[i]);
}
return result;
}
该函数还需要在每个数组元素上调用的数组和函数。它返回一个新数组,其中包含每个原始数组元素的访问者调用结果