Kuroki Kaze Kuroki Kaze - 2 months ago 12
Javascript Question

No Array.filter() in Rhino?

Why can't I use

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".


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))

    return res;