问题 对象不支持属性或方法'filter'


我遇到了一个IE8问题,我最初认为是由于缺乏对indexOf()属性的IE8支持,但似乎并非如此。我通过原型实现了indexOf()但仍然保持错误消息 -

对象不支持属性或方法'filter'

我的代码是passArray.filter行的错误。

  function consolidatedFilters(passedArray, passedFilter, passedFilterType)
    if (passedFilterType == "specialty")
    {       
        var filteredArray = passedArray.filter(
            function(el)
            {
               for (i in passedFilter) 
               {
                    if (passedFilter[i] == el[8]) 
                    {
                        return true;
                    }
               }
               return false
             }
        );      
        return filteredArray;
    }

10790
2017-09-15 14:45


起源

看一下: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... - Felix Kling
@Felix - 太棒了,这解决了,谢谢! - firedrawndagger


答案:


Array.filter不符合跨浏览器标准,您必须将其原型化到Array上。您还可能想要验证您要过滤的数组是否从未类型为“未定义”

更新: MDN提供了如何将过滤器原型化到数组上的参考: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter


14
2017-09-15 14:48



+1,IE中需要IE9 +作为原生.filter; kangax.github.com/es5-compat-table - Alex K.
@Alex谢谢我正在寻找类似的东西!不知道有没有像CSS一样的浏览器的整个J / S兼容性表。 - firedrawndagger
我试图调用 function isBigEnough(value){返回值> = 10; } var filtered = [12,5,8,130,44] .filter(isBigEnough); - gstackoverflow
在浏览器控制台中,我看到旧的结果 - gstackoverflow