Visit Mozilla.org

Core JavaScript 1.5 Reference:Global Objects:Array:filter

出典: MDC


目次

[編集] 概要

与えられた関数によってテストを実行し、それに合格したすべての要素からなる新しい配列を生成します。

Array のメソッド
実装されたバージョン: JavaScript 1.6 (Gecko 1.8b2 以降)
ECMAScript バージョン: なし

[編集] 構文

var filteredArray = array.filter(callback[, thisObject]);

[編集] パラメータ

callback 
配列の各要素に対して実行するテスト関数。
thisObject 
callback を実行するときに this として使用するオブジェクト。

[編集] 説明

filter は、与えられた callback 関数を配列の各要素に対して一度ずつ呼び出し、callback が真の値を返したすべての値からなる新しい配列を生成します。callback は値が代入されている配列のインデックスに対してのみ呼び出されます。つまり、すでに削除されたインデックスや、まだ値が代入されていないインデックスに対しては呼び出されません。callback によるテストに合格しなかった配列要素は単純にスキップされ、新しい配列には含まれません。

callback は、要素の値、要素のインデックス、走査されている Array オブジェクトという 3 つの引数をともなって呼び出されます。

filterthisObject パラメータが与えられると、callback の呼び出しのたびにそのオブジェクトが this として使用されます。thisObject が与えられないか null だと、callback に結び付けられたグローバルオブジェクトが代わりに使用されます。

filter は呼び出された配列を変化させません。

filter によって処理される要素の範囲は、callback が最初に呼び出される前に設定されます。filter の呼び出しが開始された後に追加された要素に対しては、callback は実行されません。既存の配列要素が変更されたり、削除された場合、callback に渡される値は filter がそれらを訪れた時点での値になり、削除された要素には訪問されません。

[編集] 互換性

filter は ECMA-262 標準に対する JavaScript 拡張なので、ECMA-262 標準の他の実装では存在しない場合があります。次のコードをスクリプトの先頭に挿入すると、filter がネイティブでサポートされていない ECMA-262 実装でも filter を使用できるようになります。これは Firefox および SpiderMonkey で使われているアルゴリズムとまったく同じものです。

if (!Array.prototype.filter)
{
  Array.prototype.filter = function(fun /*, thisp*/)
  {
    var len = this.length;
    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]; // fun が this を 変化させた場合に備えて
        if (fun.call(thisp, val, i, this))
          res.push(val);
      }
    }

    return res;
  };
}

[編集]

[編集] 例: 小さい値をすべて取り除く

次の例では、filter を使って 10 よりも小さい値を持つ要素をすべて取り除いた配列を生成します。

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);