【JavaScript】Filter関数の活用法10選!初心者から上級者まで完全理解

JavaScriptでFilter関数を活用しようJS
この記事は約12分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事では、JavaScriptの核となる機能の一つ、Filter関数について詳しく解説します。

初心者でも分かりやすいように基本から応用までを丁寧に説明し、サンプルコードを通して実践的な理解を深めていきましょう。

Filter関数は、配列の要素を条件に基づいて絞り込む強力なツールです。

この機能をマスターすれば、JavaScriptでのデータ操作がぐっと楽になります。

●JavaScriptとFilter関数の基本

JavaScriptは、ウェブページを動的にするために使われるプログラミング言語です。

これは、ブラウザだけでなくサーバーサイドでも使われており、多岐にわたる用途に対応しています。

特に、配列操作においては強力な機能を持っており、Filter関数もその一つです。

○JavaScriptとは

JavaScriptは、HTMLやCSSと並んでウェブ開発に不可欠な言語です。

ユーザーのインタラクションに応じてページ内容を動的に変更したり、サーバーからデータを取得して表示したりすることができます。

また、Node.jsなどの技術によりサーバーサイドでの使用も広がっています。

○Filter関数の概要

Filter関数は、配列の各要素に対してテストを行い、そのテストをパスする要素だけからなる新しい配列を作成します。

この関数は非常に強力で、複雑なデータセットから特定の条件を満たす要素を簡単に抽出することが可能です。

○Filter関数の基本的な構文

Filter関数の基本的な構文は非常にシンプルです。

まず、処理したい配列に対して.filter()メソッドを呼び出します。

次に、このメソッドにはコールバック関数を渡します。

このコールバック関数は、配列の各要素に対して呼び出され、その要素が新しい配列に含まれるべきかどうかを決定します。

コールバック関数がtrueを返した要素のみが新しい配列に含まれます。

●Filter関数の使い方

JavaScriptのFilter関数は、配列の要素を特定の条件に基づいてフィルタリングするために使用されます。

この関数は、配列の各要素に対してテストを行い、その結果が真(true)の要素だけを新しい配列に集めます。

ここでは、Filter関数の使い方について、具体的なサンプルコードを交えて説明します。

○サンプルコード1:特定の条件を満たす要素の抽出

下記のサンプルコードは、数値の配列から偶数のみを抽出する例です。

let numbers = [1, 2, 3, 4, 5, 6];
let evenNumbers = numbers.filter(number => number % 2 === 0);

console.log(evenNumbers); // 出力: [2, 4, 6]

この例では、filterメソッドに渡されるコールバック関数が、各要素が偶数かどうかをチェックします。

偶数の場合はtrueを返し、それ以外はfalseを返します。

この結果に基づいて、新しい配列evenNumbersが作成されます。

○サンプルコード2:オブジェクトの配列から条件に合う要素を抽出

Filter関数は、オブジェクトの配列に対しても使用できます。

下記の例では、ユーザーのリストから特定の年齢以上のユーザーを抽出しています。

let users = [
    { name: "太郎", age: 18 },
    { name: "花子", age: 22 },
    { name: "次郎", age: 16 }
];
let adultUsers = users.filter(user => user.age >= 18);

console.log(adultUsers);
// 出力: [{ name: "太郎", age: 18 }, { name: "花子", age: 22 }]

このコードでは、filterメソッドが各ユーザーオブジェクトのageプロパティをチェックし、18歳以上のユーザーのみを新しい配列adultUsersに含めています。

○サンプルコード3:Filter関数を使った複数条件の適用

Filter関数では複数の条件を組み合わせることもできます。

下記の例では、特定の年齢範囲にあるユーザーを抽出しています。

let users = [
    { name: "太郎", age: 20 },
    { name: "花子", age: 25 },
    { name: "次郎", age: 17 },
    { name: "美紀", age: 30 }
];
let youngAdults = users.filter(user => user.age >= 20 && user.age <= 30);

console.log(youngAdults);
// 出力: [{ name: "太郎", age: 20 }, { name: "花子", age: 25 }, { name: "美紀", age: 30 }]

このサンプルでは、20歳以上30歳以下のユーザーが新しい配列youngAdultsに抽出されています。

これにより、Filter関数を使って複雑な条件に基づいたデータの処理が可能になります。

●Filter関数の応用例

JavaScriptのFilter関数は、基本的な使い方だけでなく、さまざまな応用が可能です。

ここでは、Filter関数の応用例をいくつか紹介し、それぞれに対するサンプルコードを提供します。

○サンプルコード4:データの統計処理におけるFilterの使用

Filter関数はデータの統計処理にも有効です。

たとえば、特定の条件を満たすデータの割合を計算する際に利用できます。

下記のサンプルコードは、商品リストから価格が特定の範囲内にある商品の割合を計算する例です。

let products = [
    { name: "商品A", price: 2500 },
    { name: "商品B", price: 3800 },
    { name: "商品C", price: 1200 },
    { name: "商品D", price: 5600 }
];
let affordableProducts = products.filter(product => product.price >= 2000 && product.price <= 4000);
let ratio = affordableProducts.length / products.length * 100;

console.log(`価格が2000円以上4000円以下の商品の割合: ${ratio}%`);

このコードでは、filterメソッドを使用して価格が2000円以上4000円以下の商品のみを抽出し、その割合を計算しています。

○サンプルコード5:Filter関数とマップ関数の連携

Filter関数と他の配列メソッド、例えばmap関数と組み合わせることで、より複雑なデータ処理が可能になります。

下記の例では、商品のリストから特定の条件を満たす商品の名前のみを抽出しています。

let products = [
    { name: "商品A", price: 2500, stock: 5 },
    { name: "商品B", price: 3800, stock: 2 },
    { name: "商品C", price: 1200, stock: 0 },
    { name: "商品D", price: 5600, stock: 4 }
];
let availableProducts = products.filter(product => product.stock > 0);
let productNames = availableProducts.map(product => product.name);

console.log(`在庫ありの商品: ${productNames.join(', ')}`);

このコードでは、まずfilterメソッドで在庫がある商品を選び、次にmapメソッドでその商品の名前のみを新しい配列に抽出しています。

○サンプルコード6:Filter関数で生成された結果の更なる処理

Filter関数で生成された配列は、さらに別の処理に使用することができます。

例えば、特定の条件を満たす要素を抽出した後に、それらの要素に対して集計や変換を行うことが可能です。

下記のコードでは、特定の年齢以上のユーザーを抽出した後、そのユーザーたちの平均年齢を計算しています。

let users = [
    { name: "太郎", age: 20 },
    { name: "花子", age: 25 },
    { name: "次郎", age: 17 },
    { name: "美紀", age: 30 }
];
let adultUsers = users.filter(user => user.age >= 20);
let averageAge = adultUsers.reduce((acc, user) => acc + user.age, 0) / adultUsers.length;

console.log(`20歳以上のユーザーの平均年齢: ${averageAge}`);

このサンプルコードでは、filterメソッドで20歳以上のユーザーを抽出した後、reduceメソッドを使用してその平均年齢を計算する例を表しています。

●よくあるエラーと対処法

JavaScriptでFilter関数を使用する際、いくつかの一般的なエラーや誤解があります。

これらのエラーを理解し、それぞれの対処法を知ることは、効率的なコードを書くために非常に重要です。

○エラー例1:不適切なコールバック関数の使用

Filter関数に渡すコールバック関数は、各要素に対して真偽値を返す必要があります。

しかし、返り値が真偽値でない場合、予期しない挙動が発生することがあります。

// 不適切なコールバック関数の例
let numbers = [1, 2, 3, 4, 5];
let filteredNumbers = numbers.filter(number => {
    if (number > 2) {
        return number;
    }
});

console.log(filteredNumbers); // 予期しない結果が出力される

この例では、3以上の数値を直接返していますが、正しくは真偽値を返すべきです。

修正後のコードは次のようになります。

// 修正後のコード
let correctedFilteredNumbers = numbers.filter(number => number > 2);
console.log(correctedFilteredNumbers); // 正しい結果が出力される

この修正版では、number > 2が真偽値を返し、期待通りの結果を出力します。

○エラー例2:期待通りの結果が得られない場合

Filter関数を使用する際、コールバック関数の条件が不適切だったり、誤っている場合に期待通りの結果が得られないことがあります。

このような場合、条件式を見直す必要があります。

○エラー例3:Filter関数と他の関数の組み合わせでの問題点

Filter関数と他の配列関数を組み合わせて使用する場合、それらの関数の順序が結果に大きな影響を与えます。

例えば、map関数とfilter関数を組み合わせる場合、どちらを先に実行するかによって結果が異なります。

let numbers = [1, 2, 3, 4, 5];
let processedNumbers = numbers.map(number => number * 2).filter(number => number > 5);

console.log(processedNumbers); // [6, 8, 10] という結果になる

この例では、最初にmap関数で各要素を2倍にし、その後でfilter関数を使って5より大きい数値を抽出しています。

これにより、処理の順序によって結果が変わることがわかります。

●Filter関数を深く理解するための豆知識

JavaScriptにおけるFilter関数は、多くの場面で有用ですが、その効果的な使用にはいくつかの豆知識が役立ちます。

ここでは、Filter関数の性能に関する考察と他の配列メソッドとの比較について見ていきます。

○豆知識1:Filter関数のパフォーマンスに関する考察

Filter関数は高度な配列処理を行いますが、大きな配列を扱う場合にはパフォーマンスへの影響を考慮する必要があります。

Filter関数は配列の各要素を一度ずつ走査するため、配列のサイズが大きい場合には処理時間が長くなり得ます。

パフォーマンスの観点からは、可能であればFilter関数の呼び出し回数を減らし、必要な処理を一度の走査で完結させることが望ましいです。

また、不必要な要素が多く含まれる場合には、事前にそれらを除去するなどして配列のサイズを小さく保つことも重要です。

○豆知識2:他の配列メソッドとの比較

JavaScriptの配列メソッドには、Filter関数以外にも多くの便利なメソッドがあります。

例えば、「map」は配列の各要素に対して同じ処理を施し、新しい配列を生成するのに使われます。

一方で、「reduce」は配列の要素を一つにまとめる処理に適しています。

Filter関数を他のメソッドと組み合わせることで、より複雑なデータ処理を実現できます。

例えば、先にFilter関数で特定の条件を満たす要素を抽出し、その後でmap関数を適用してそれらの要素を変換するというようにです。

これらのメソッドはそれぞれ独特の特性を持ち、適切に組み合わせることで、効率的かつ強力なデータ操作を行うことが可能です。

各メソッドの特性を理解し、目的に応じて適切なメソッドを選択することが重要です。

まとめ

この記事では、JavaScriptのFilter関数の基本から応用までを幅広く解説しました。

Filter関数は、配列内の要素を特定の条件に基づいて抽出する強力なツールです。

エラーを避け、効率的に使用するための豆知識も紹介しました。

この知識を活用することで、JavaScriptにおける配列処理の技術をさらに深めることができます。

初心者から上級者まで、JavaScriptのFilter関数を理解し、活用するための重要なポイントを、具体的なサンプルコードとともにご紹介しました。