如何编写在IE8中工作的过滤器列表方法

时间:2014-02-04 10:16:43

标签: javascript internet-explorer-8

我有这个方法:

function filter(arr, criteria) {
  return arr.filter(function(obj) {
    return Object.keys(criteria).every(function(c) {
      return obj[c] == criteria[c];
    });
  });
}

我想编写一个同样适用的程序,并且可以在Internet Explorer 8中运行(这意味着不是ECMA5 javascript)。

1 个答案:

答案 0 :(得分:1)

您通常可以填充缺少的属性。例如,Array.filter()可以实现,如MDN所示缺失的那样:

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

    if (this === void 0 || this === null)
      throw new TypeError();

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

    var res = [];
    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++)
    {
      if (i in t)
      {
        var val = t[i];

        // NOTE: Technically this should Object.defineProperty at
        //       the next index, as push can be affected by
        //       properties on Object.prototype and Array.prototype.
        //       But that method's new, and collisions should be
        //       rare, so use the more-compatible alternative.
        if (fun.call(thisArg, val, i, t))
          res.push(val);
      }
    }

    return res;
  };
}

如果您在IE8.js中添加前缀,则可以继续使用上述代码。