Ric*_*d H 35 javascript map internet-explorer-8
这样做时:
var a = new Array("a", "b");
a.map(function() { });
Run Code Online (Sandbox Code Playgroud)
在IE8中,我得到:
"Object doesn't support this property or method"
Run Code Online (Sandbox Code Playgroud)
IE8中不支持此方法,还是有其他问题?我有一个谷歌,但获得了很多谷歌地图的JavaScript问题/问题......
编辑:确定IE8及以下版本不支持.map()函数.将代码从MDN复制粘贴在这里将完全.MAP()函数添加到阵列中每个原型的规格,如果没有原生支持(它似乎很好地工作).
小智 43
解决方案是jQuery.map
而不是这个:
a.map(function( ) { });
你必须做
jQuery.map(a, function( ) {
//what ever you want todo ..
}
Har*_*rry 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);
Run Code Online (Sandbox Code Playgroud)
在第一个.map或.filter调用之前放置任何位置.问题解决了.jQuery.map()方法无法按预期工作.
更新:
我刚刚在稀疏数组上测试它:如果map或filter参数是一个接受和处理undefined值的函数- 它可以工作,但结果并不明显:
让我们定义测试稀疏数组:
var t = []
t[1] = 1; t[3] = 3; t[5] = 5;
Run Code Online (Sandbox Code Playgroud)
让我们看看IE8对t的评价:"[undefined,1,undefined,3,undefined,5]"
我们试试吧:
t.filter(function(x){return x<4})
Run Code Online (Sandbox Code Playgroud)
是什么,IE8?它是:"[1,3]".注意 - 没有未定义的值.我个人希望如此.
但试试这个:
t.map(function(x){return 2<<x})
Run Code Online (Sandbox Code Playgroud)
而且...... "[2,4,2,16,6,64]".那真是怪了!:) 试试这个:
t.map(function(x){return Math.pow(2,x)})
Run Code Online (Sandbox Code Playgroud)
并且?... "[NaN,2,NaN,8,NaN,32]" - 我宁愿期望这个结果用于之前的测试.它至少是逻辑的 - Math.pow()应该返回一个number类型NaN,不管它是什么意思,IS是number为无效操作保留的特殊类型.所以结果或多或少是正确的.map如果t仍然是稀疏数组,则结果完全正确.
所以没有进一步的麻烦 - 最终正确的版本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);
Run Code Online (Sandbox Code Playgroud)
而且测试:
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);
Run Code Online (Sandbox Code Playgroud)
预期成绩:
[object Array] [undefined,1,undefined,3,undefined,5]
[object Array] [undefined,4,undefined,16,undefined,64]
[object Array] [undefined,1,undefined,3,undefined,5]