カテゴリ: JavaScript 更新日: 2026/03/14

JavaScriptのfilterメソッドで条件に合う要素を抽出する方法

JavaScriptのfilterメソッドで条件に合う要素を抽出する方法
JavaScriptのfilterメソッドで条件に合う要素を抽出する方法

先生と生徒の会話形式で理解しよう

生徒

「JavaScriptで配列の中から条件に合ったものだけを取り出す方法ってありますか?」

先生

「ありますよ!それがfilterメソッドです。配列の中から『これがほしい!』という条件に合う要素だけを抽出するための便利な方法です。」

生徒

「具体的にはどうやって使うんですか?」

先生

「順を追って説明しますね!」

1. filterメソッドとは? 条件に合う要素だけを選ぶ仕組み

1. filterメソッドとは? 条件に合う要素だけを選ぶ仕組み
1. filterメソッドとは? 条件に合う要素だけを選ぶ仕組み

JavaScriptのfilter(フィルター)メソッドは、その名の通り、配列の中から「特定の条件に一致するデータだけを抽出(ろ過)する」ための便利な機能です。

身近な例で考えると、Webサイトのショッピング検索で「1,000円以下の商品だけを表示する」といった絞り込み機能と同じ役割を果たしています。このメソッドの最大の特徴は、元の配列(データ群)を壊さずに、条件に合ったものだけをまとめた「新しい配列」を自動で作ってくれる点にあります。

プログラミング未経験の方でも分かりやすいよう、簡単なフルーツのリストを使って解説します。例えば、たくさんの果物の中から「バナナ」だけをすべて取り出したい場合は、以下のように記述します。


let fruits = ["りんご", "バナナ", "みかん", "バナナ", "ぶどう"];

// 配列fruitsの中から、中身が「バナナ」であるものだけを抽出します
let bananas = fruits.filter(function(item) {
  return item === "バナナ";
});

console.log(bananas);

["バナナ", "バナナ"]

このコードでは、プログラムが配列の要素を一つずつチェックし、「これはバナナですか?」という問いに「はい(true)」と答えたものだけを新しい箱(配列)に詰め込んでいます。

元のfruitsという配列の中身は書き換えられずにそのまま残るため、データ管理が非常に安全に行えるのもfilterメソッドが好まれる大きな理由です。初心者の方はまず、「条件で絞り込んで新しいリストを作る魔法」と覚えておきましょう。

2. filterの仕組み:コールバック関数で判定を繰り返すプロセス

2. filterの仕組み:コールバック関数で判定を繰り返すプロセス
2. filterの仕組み:コールバック関数で判定を繰り返すプロセス

filterメソッドの動きを理解する最大のポイントは、「コールバック関数」と呼ばれる判定用のルールを、配列の要素ひとつひとつに対して順番に実行していく点にあります。

イメージとしては、ベルトコンベアで流れてくる商品(配列の要素)を、検査員(関数)が「合格(true)」か「不合格(false)」か瞬時に仕分けていくような仕組みです。検査員が「合格!」と判定した要素だけが、新しい箱(新しい配列)に詰められていきます。

プログラミング未経験の方にも分かりやすいよう、「テストの点数リストから合格者(60点以上)だけを取り出す」という例で見てみましょう。


let scores = [45, 80, 55, 92, 60];

// scoresの中身を一つずつ取り出して「score」に入れ、60以上かチェックします
let passingScores = scores.filter(function(score) {
  return score >= 60; // 60以上ならtrueを返し、新しい配列に追加されます
});

console.log(passingScores);

[80, 92, 60]

このコードでは、内部で以下のような処理が繰り返されています。

  • 45は60以上か? → いいえ(false)なので無視
  • 80は60以上か? → はい(true)なのでキープ
  • 55は60以上か? → いいえ(false)なので無視
  • ...(これを最後まで繰り返す)

最終的に true と判定された 80, 92, 60 だけが抽出されました。条件式(この場合は score >= 60)を書き換えるだけで、自由自在にデータを絞り込むことができるのが filter の強みです。この「条件を一つずつ判定する」という感覚をぜひ覚えておいてください。

3. 短く書く方法:アロー関数でさらにスッキリ

3. 短く書く方法:アロー関数でさらにスッキリ
3. 短く書く方法:アロー関数でさらにスッキリ

JavaScriptでは、条件を書く関数をもっと短く書ける「アロー関数」という書き方があります。


let numbers = [1, 3, 7, 10, 5];
let bigNumbers = numbers.filter(num => num > 5);
console.log(bigNumbers);  // [7, 10]

コードが短くて見やすくなるので、慣れたらぜひ使いましょう。

4. filterでよくある使い方の例

4. filterでよくある使い方の例
4. filterでよくある使い方の例

以下は、filterを使った他の例です。

  • 文字列の長さが5文字以上のものだけ集める
  • 配列の中の偶数だけ抽出する
  • オブジェクトの配列から特定の条件を満たすものだけ選ぶ

// 文字列の長さが5文字以上
let words = ["りんご", "バナナ", "みかん", "メロン"];
let longWords = words.filter(word => word.length >= 5);
console.log(longWords);  // ["バナナ", "メロン"]

// 偶数だけ抽出
let numbers = [1, 2, 3, 4, 5, 6];
let evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers);  // [2, 4, 6]

// オブジェクト配列で年齢が20以上の人だけ
let people = [
  {name: "太郎", age: 18},
  {name: "花子", age: 22},
  {name: "次郎", age: 20}
];
let adults = people.filter(person => person.age >= 20);
console.log(adults);  
// [{name: "花子", age: 22}, {name: "次郎", age: 20}]

5. filterメソッドのポイントと注意

5. filterメソッドのポイントと注意
5. filterメソッドのポイントと注意

filterは元の配列を変更しません。新しい配列を返すので、元のデータは安心です。

また、条件を考える関数を書くのが少し難しく感じるかもしれませんが、慣れるととても便利でパワフルな方法です。

使うときは「どんな条件で選びたいか?」をまず考え、その条件をfilterに渡す関数として書くことが大切です。

まとめ

まとめ
まとめ

ここまでJavaScriptのfilterメソッドについて詳しく解説してきましたが、いかがでしたでしょうか。プログラミングにおいて、膨大なデータの中から必要な情報だけを抽出する作業は日常茶飯事です。例えば、ショッピングサイトで「在庫がある商品だけを表示する」機能や、SNSで「特定のキーワードを含む投稿を非表示にする」といった処理も、内部的にはこのfilterのような仕組みが動いています。

filterメソッドを使いこなすための重要ポイント

filterメソッドをマスターするために、覚えておきたい特徴を改めて整理しましょう。まず最も重要なのは、このメソッドが「破壊的ではない」という点です。元の配列を書き換えることなく、条件に合致した要素だけで構成される「新しい配列」を生成します。これにより、元のデータを保持したまま、用途に応じたデータの加工が可能になります。

また、実務レベルでは単なる数値や文字列の配列だけでなく、「オブジェクトの配列」を扱う場面が非常に多いです。ユーザー情報、商品データ、投稿記事といった複雑なデータ構造から、特定のステータスを持つものだけを取り出す際にfilterは真価を発揮します。

さらに応用的な実例:複数条件でのフィルタリング

実際の開発現場では、一つの条件だけでなく「かつ(AND)」や「または(OR)」といった複数の条件を組み合わせて抽出することもあります。JavaScriptの論理演算子(&&||)を使うことで、より高度なデータ抽出が可能になります。


// 商品リストから「カテゴリが家電」かつ「価格が50000円以下」のものを抽出
const products = [
    { name: "冷蔵庫", category: "家電", price: 80000 },
    { name: "炊飯器", category: "家電", price: 15000 },
    { name: "掃除機", category: "家電", price: 30000 },
    { name: "ノート", category: "文具", price: 200 }
];

const affordableAppliances = products.filter(item => {
    return item.category === "家電" && item.price <= 50000;
});

console.log(affordableAppliances);

[
  { "name": "炊飯器", "category": "家電", "price": 15000 },
  { "name": "掃除機", "category": "家電", "price": 30000 }
]

TypeScriptでの型安全なfilter利用

モダンなWeb開発ではTypeScriptが主流となっています。TypeScriptでfilterを使う場合、型定義をしっかり行うことで、抽出後の配列に含まれる要素の型を保証することができます。


interface User {
    id: number;
    name: string;
    isActive: boolean;
}

const users: User[] = [
    { id: 1, name: "田中", isActive: true },
    { id: 2, name: "佐藤", isActive: false },
    { id: 3, name: "鈴木", isActive: true }
];

// アクティブなユーザーのみを抽出
const activeUsers: User[] = users.filter((user: User) => user.isActive);

HTML要素のフィルタリングへの応用

JavaScriptはブラウザ上で動く言語ですから、DOM操作(HTMLの操作)とも非常に相性が良いです。例えば、特定のクラス名を持つ要素のテキスト内容を判定して処理を分けるといった使い方も考えられます。


<ul id="itemList">
    <li class="item" data-status="sale">セール品A</li>
    <li class="item" data-status="normal">通常品B</li>
    <li class="item" data-status="sale">セール品C</li>
</ul>

上記のようなHTML構造がある場合、JavaScript側で要素を取得し、Array.from()などで配列に変換してからfilterを適用することで、特定のステータスを持つ要素だけを抽出して操作することができます。

よくある間違いとデバッグのコツ

初心者が陥りやすいミスとして、「returnを書き忘れる」ことがあります。アロー関数の省略形(波括弧なし)であれば問題ありませんが、波括弧 {} を使った場合は、明示的に return を書かないと、結果がすべて undefined(false扱い)になり、空の配列が返ってきてしまいます。


// 間違った例:returnがないため空配列になる
const numbers = [10, 20, 30];
const filtered = numbers.filter(n => {
    n > 15; // ここで return が必要!
});
console.log(filtered); // []

もし思い通りの結果が得られない場合は、コールバック関数の中で console.log() を使い、各要素がどのような判定を受けているかを確認するのが近道です。

先生と生徒の振り返り会話

生徒

「先生、filterメソッドの使い方がかなり分かってきました!要するに、関数の中で『これが必要!』という時に true を返せばいいんですよね?」

先生

「その通りです!よく理解できましたね。filterは配列の全要素を順番にチェックしてくれる、とても働き者なメソッドなんです。」

生徒

「記事の中で紹介されていた『アロー関数』を使うと、本当に1行で書けちゃうのが驚きでした。以前は for 文を使って長いコードを書いていたので、かなり楽になりそうです。」

先生

「そうですね。for 文でも同じことはできますが、filter を使うことで『何をしているコードなのか(この配列を抽出しているんだな)』という意図が他のプログラマーにも伝わりやすくなるというメリットもあるんですよ。これを宣言的プログラミングと呼んだりします。」

生徒

「宣言的、ですか。かっこいいですね!あと、元の配列が変わらないというのも安心しました。元データが壊れちゃうと、後で別の計算に使いたい時に困りますもんね。」

先生

「素晴らしい視点です。不変性(イミュータビリティ)を保つことは、バグの少ない綺麗なコードを書くための基本ですからね。ちなみに、抽出した結果が1つもない場合はどうなるか分かりますか?」

生徒

「えーっと、誰も条件に合わなかったら……エラーになっちゃうんですか?」

先生

「いいえ、エラーにはなりません。その場合は『空の配列 [] 』が返ってきます。これも filter の優しいところですね。結果が空でも配列として扱えるので、その後の処理でエラーが起きにくいんです。」

生徒

「なるほど、空の配列が返るなら、そのまま length をチェックして『該当なし』と表示させることも簡単にできそうですね!」

先生

「完璧です!その調子で、実際のプログラムでもどんどん filter を使ってみてください。次は、抽出した要素を加工する map メソッドについても学んでいくと、さらにJavaScriptが楽しくなりますよ。」

生徒

「はい!ありがとうございます。まずは手元のプロジェクトで、ユーザーリストの検索機能を filter で書き換えてみます!」

カテゴリの一覧へ
新着記事
New1
JavaScript
JavaScriptの条件式におけるnull・undefined判定のコツ!初心者でもわかる判定方法ガイド
New2
JavaScript
JavaScriptの条件式で論理演算子(&&, ||, !)を活用する方法!初心者でもわかる使い方ガイド
New3
TypeScript
TypeScriptでエラー処理を共通関数化して効率的に開発しよう!初心者向け例外処理ガイド
New4
JavaScript
JavaScriptの条件式における比較演算子の使い方まとめ!初心者でもわかる基本ルールと活用法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptのtoStringとString関数の違いを初心者向けに解説
No.4
Java&Spring記事人気No4
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptで統一感のあるコードを書くための基本ルール完全ガイド初心者向けコーディング規約入門
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptでプロジェクトを管理する方法!ディレクトリ構造とファイル管理の基本
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptのnever型を使ったエラーハンドリング!例外処理を極める安全なコードの書き方
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptのonclick・onchangeなどの基本イベントを理解しよう