【ふぃるたーかんすう】

filter関数 とは?

最終更新:
💡 条件に合う要素だけを「ふるいにかけて」選び出す

条件に合う要素を選び出す関数。ここではJavaScriptのArray.prototype.filterを扱い、条件関数の結果が真と判定される要素を順番どおり新しい配列に集める。

📌 このページのポイント
filter:条件で選ぶ 1 8 3 12 2 7 条件:x >= 5 [8, 12, 7] nums.filter(x => x >= 5) 条件を満たす値を、元の順で取り出す
JavaScriptのfilterは条件を満たす要素を新しい配列へ取り出す。
ひよこ ひよこ
filter関数ってどう使うの?
ペンギン先生 ペンギン先生
JavaScriptなら、数値の配列に「nums.filter(x => x >= 5)」と書けるよ。[1, 8, 3, 12, 2, 7]から、5以上の[8, 12, 7]を選び出すんだ。ここではJavaScriptの配列のfilterを説明するね。
ひよこ ひよこ
mapとfilterの違いは何?
ペンギン先生 ペンギン先生
mapは各要素を変換し、filterは条件で選ぶよ。たとえばfilterで5以上を選んでから、mapでそれぞれを2倍にできる。filterの結果は元より短くなることも、全要素が残ることもあるんだ。
ひよこ ひよこ
条件関数はtrueだけを返さないといけない?
ペンギン先生 ペンギン先生
JavaScriptでは、返した値を真偽値として判定するよ。厳密なtrueだけではないんだ。分かりやすい比較式を使うと、何を残す条件なのか読み取りやすいね。
ひよこ ひよこ
元の配列は絶対に変わらないの?
ペンギン先生 ペンギン先生
filter自体は元配列を書き換えないけど、条件関数の中では変更できてしまうよ。結果の配列も、含まれるオブジェクトを丸ごと複製するわけではない。元と結果が同じオブジェクトを参照する点に注意しよう。
ひよこ ひよこ
何も条件に合わなかったら?
ペンギン先生 ペンギン先生
条件関数が通常どおり動けば、空の配列を返すよ。ただし条件関数で例外が起きれば、それはfilterの外へ伝わる。複数回つなぐときは前の結果を次が調べるので、速さを決めつけず、必要なら実際の処理を測ろう。
もっと詳しく知りたい人へ

TypeScriptでは、型述語を自分で書かないと型を絞れない?

必ずしもそうではない。TypeScript 5.5以降は、単一のreturnで引数を変更せず、その値の型を絞るboolean式を返すなどの条件を満たすと型述語を推論する。nullを除くx !== nullなどが例。明示的な型述語も使えるが、その宣言が実際の判定と一致するかは書く側で確認する。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「filter関数」って出てきたら「条件に合う要素を選び出す処理」と思えばだいたいOK!
📖 おまけ:英語の意味
「filter」 = ろ過する・選別する
💬 コーヒーフィルターのように、条件に合うものだけを通すイメージだよ

参考資料

← 用語集にもどる