No Array.filter() in Rhino?

javascript, rhino

Solution

There is no standardized `filter` function for Javascript Arrays, it is only an extension to the standard. (There is as of the ES5 spec published just a month after this answer was posted.) The MDC reference page gives you an compatibility sample to use for those implementations that do not support it...

if (!Array.prototype.filter)
{
  Array.prototype.filter = function(fun /*, thisp*/)
  {
    var len = this.length >>> 0;
    if (typeof fun != "function")
      throw new TypeError();

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

    return res;
  };
}

Problem

Why can't I use `Array.filter()` in Rhino? The code is like this: ``` var simple_reason = ["a", "b", "c"]; print(typeof simple_reason.filter); var not_so_simple_reason = new Array("a", "b", "c"); print(typeof not_so_simple_reason.filter); ``` Both cases output "undefined".

Original source