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