filter()の用途として正しいのは? (MDN Web Docsなどのドキュメントでは Array.prototype.filter() と表記されていますが、基本的に実際のコードでは配列に対して .filter() と書きます)
解説
正解は「条件に合う要素だけを抽出して新しい配列を返す」です。filter()はコールバック関数がtrueを返した要素だけを集めた新しい配列を生成するメソッドです。他の選択肢はそれぞれ別のArrayメソッドの機能を説明しています。「各要素を変換して新しい配列を返す」はmap()の役割です。要素数は変わらず、各要素に変換処理を適用します。「配列の全要素を1つの値に集約する」はreduce()の役割です。合計値やオブジェクトへの変換など、配列を単一の値にまとめます。「条件に合う最初の要素を1つだけ返す」はfind()の役割です。配列ではなく要素そのもの(またはundefined)を返します。つまりfilter()の特徴は、条件によって要素数が減る可能性がある新しい配列を返す点にあります。filter()はES5(2009年)で導入された高階関数(関数を引数に取る関数)の一つです。元の配列を変更せず新しい配列を返すため、非破壊的(immutable)な操作が可能です。コールバックは(element, index, array)の3引数を受け取り、戻り値がtruthyな要素だけが結果に含まれます。実務での活用例たとえば、APIから取得したユーザー一覧から有効なアカウントだけを抽出するケースです。const users = [ { name: 'Alice', active: true }, { name: 'Bob', active: false }, { name: 'Carol', active: true } ]; const activeUsers = users.filter(user => user.active); // [{ name: 'Alice', active: true }, { name: 'Carol', active: true }]実務ではfilter()とmap()をチェーンして「絞り込み→変換」を行うパターンが頻出します。具体的にはusers.filter(u => u.active).map(u => u.name)のように書くことで、条件に合う要素の特定プロパティだけを取り出せます。filter()・map()・reduce()・find()の違いを正確に把握しておくことが、可読性の高いコードを書く基本になります。