0
 countImage = data.filter(function(value) { return value !== undefined }).length;

Object的这个语句返回错误不支持这个属性或方法,如何解决这个问题?谢谢

更新,数据是从 ajax 获取的,它是一个使用 json 编码的数组

$imgArray[] = $dir.DIRECTORY_SEPARATOR.$file.DIRECTORY_SEPARATOR.'Pv'.$filePadded.'.png';
die(json_encode($imgArray));

data: {'data':issueString}, 
                success: function (data) {
                    countImage = data.filter(function(value) { return value !== undefined }).length;


..........
4

2 回答 2

1

array.filter()不适用于 IE < 10,它在 Chrome、FF 和IE 10中可用。因此您需要使用其他一些替代方法来过滤数组。

您可以使用jQuery.grep代替 fitler 方法

代码

var a = [1, 2, 3, 4, 5, undefined, 6, 7, undefined, 8];
alert(a.length);
var arr = jQuery.grep(a, function(n, i){
  return n != undefined;
});

alert(arr.length);

小提琴

于 2013-01-22T07:17:40.563 回答
1

你得到的是一个 javascript 数组而不是一个 jquery 对象,所以你正在调用Array.prototype.filter方法。

如果您看到 IE 的兼容性,就会提到它在 IE9+ 中受支持。

在该页面中,还有一种方法可用于不支持Array.prototype.filter的浏览器

if (!Array.prototype.filter)
{
  Array.prototype.filter = function(fun /*, thisp */)
  {
    "use strict";

    if (this == null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun != "function")
      throw new TypeError();

    var res = [];
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in t)
      {
        var val = t[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, t))
          res.push(val);
      }
    }

    return res;
  };
}
于 2013-01-22T07:20:09.267 回答