JavaScript

Array.prototype.filter()メソッド

 編集:2022.09.19 by T.A.

その Array の全ての要素をコールバック関数に掛けて評価がtrueだった要素を新しい配列で返します。

コールバック関数による:

arr.filter(callback[, thisArg])
関数:
function 関数名(element[, index[, array]]){
 処理
}
関数: アロー関数式
関数名=(element[, index[, array]]) => {
 処理
}

インラインコールバック関数による:

arr.filter(function(element[, index[, array]]){処理}[, thisArg])

アロー関数による:

arr.filter( (element[, index[, array]]) => {処理})
arr Arrayオブジェクト
callback 実行する関数名を記述。
関数名 callbackと同じ名前を記述。
処理 処理プログラム。必ずreturnで評価結果のBookean値を返すこと。true の場合はその処理の要素が適用されます。

アロー関数使用の場合、「{ }」に囲まれていない場合は評価式となります。

element 配列内で処理中の現在の要素です。
index 省略可。配列内で処理中の現在の要素の位置です。
array 省略可。filter メソッドが実行されている配列です。
thisArg 省略可callback を実行するときに this として使用する値です。
戻り値

処理 で true だった要素からなる新しい配列です。全て false だった場合は空の配列が返されます。

解説

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

callback は 3 つの引数と共に呼び出されます:

filter に引数 thisArg が与えられた場合、そのオブジェクトは callback 関数内の this 値として使われます。そうでない場合、undefined が this 値として使われます。callback 関数内の最終的な this 値は関数内の this を決定する一般的ルールに従って決められます。

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

filter() によって処理される配列要素の範囲は、callback が最初に呼び出される前に設定されます。filter() の呼び出しが開始された後に (callback から) 追加された配列要素に対しては、callback は実行されません。既存の配列要素が削除された場合は、同様にそれらの要素は処理されません。

¶省く

小さい値をすべて取り除く

次の例では、filter() を使って 10 未満の値を持つ要素をすべて取り除いた配列を生成します。

function isBigEnough(value) {
  return value >= 10	//10以上
}

D=[12, 5, 8, 130, 44].filter(isBigEnough); //=[12, 130, 44]
配列内の素数をすべて検索する

以下の例は配列内のすべての素数を返します。

const array = [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
function isPrime(num) {
  for (let i=2; num > i; i++) {
    if (num % i == 0) {
      return false;
    }
  }
  return num > 1;
}
D=array.filter(isPrime); //=[2, 3, 5, 7, 11, 13]

¶省く


テスト