Array.filter()
Rhinoで使用できないのはなぜですか?
コードは次のようになります。
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);
どちらの場合も「未定義」を出力します。
Array.filter()
Rhinoで使用できないのはなぜですか?
コードは次のようになります。
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);
どちらの場合も「未定義」を出力します。
Javascript配列には標準化された関数はなく (この回答が投稿されてからわずか1か月後に公開されたES5仕様があります。)MDCリファレンスページには、それをサポートしていない実装に使用する互換性サンプルがあります...filter
、標準の拡張にすぎません。
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;
};
}
JavaScript 1.6 を実装していない古いバージョンの Rhino を使用しています。Rhino 1.7を試してください。
フィルターは標準の JavaScript ですか? 1.8以降のMozillaにのみあります(または、この参照が教えてくれます)