カテゴリ: JavaScript 更新日: 2026/06/16

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のプログラムをより簡潔に、読みやすく書くためのテクニックとして「アロー関数(Arrow Function)」があります。これまで紹介してきたfunction(item) { ... }という書き方を、=>(矢印のような記号)を使って省略する書き方です。

特にfilterメソッドのように、「1行で終わるシンプルな条件」を記述する場合には非常に相性が良く、コードの記述量を大幅に減らすことができます。未経験の方でも、まずは「こういう短縮形があるんだな」と型を覚えるだけで、プロが書くような洗練されたコードに近づけます。


let numbers = [1, 3, 7, 10, 5];

// 「function」や「return」を省略して、1行でスッキリ記述
let bigNumbers = numbers.filter(num => num > 5);

console.log(bigNumbers);

[7, 10]

この書き方のポイントは、以下の3点です。

  • functionキーワードが不要: functionと書く手間が省けます。
  • 丸括弧の省略: 引数(ここでは num)が1つの場合は、カッコを外せます。
  • returnの省略: 処理が1行だけなら、returnも波括弧 {} も書かずに、そのまま条件式を書くだけで「判定結果」として扱われます。

コードが短くなることで、一目で「5より大きい数字を探しているんだな」と意図が伝わりやすくなります。実務の現場でもこのアロー関数が主流ですので、少しずつ慣れていきましょう。

4. 実践!filterメソッドのよくある活用シーンと具体例

4. 実践!filterメソッドのよくある活用シーンと具体例
4. 実践!filterメソッドのよくある活用シーンと具体例

filterメソッドの基本がわかったところで、実際のWeb開発やアプリ制作でよく使われる「実践的なテクニック」をいくつか見ていきましょう。どれも短いコードですが、非常に強力なデータ処理の方法です。

① 文字数で絞り込む(バリデーションや検索機能)
例えば、ユーザーが入力したキーワードのリストから「3文字以上の単語だけを抽出する」といった処理です。文字列には length という文字数を数えるプロパティがあるため、これと組み合わせて判定します。


let words = ["ペン", "ノート", "消しゴム", "机", "パソコン"];

// 3文字以上の単語だけを取り出す
let longWords = words.filter(word => word.length >= 3);

console.log(longWords);

["ノート", "消しゴム", "パソコン"]

② 算術演算で絞り込む(偶数や奇数の判定)
数値データの中から「偶数だけを取り出したい」場合は、%(余りを計算する記号)を使います。num % 2 === 0 と書くことで、2で割り切れる数、つまり偶数だけを効率よく抽出できます。


let numbers = [1, 2, 3, 4, 5, 6, 7, 8];

// 2で割った余りが0(偶数)のものだけ抽出
let evenNumbers = numbers.filter(num => num % 2 === 0);

console.log(evenNumbers);

[2, 4, 6, 8]

③ オブジェクトの配列を扱う(実務で最も多いパターン)
実際の開発では「名前と年齢」「商品名と価格」のように、複数の情報がセットになったオブジェクトの配列を扱うことがほとんどです。特定の条件(例:20歳以上の大人だけ)にマッチするデータ群を一瞬で見つけることができます。


let members = [
  { name: "田中", age: 18 },
  { name: "佐藤", age: 25 },
  { name: "鈴木", age: 30 },
  { name: "高橋", age: 15 }
];

// age(年齢)が20以上のオブジェクトだけを抽出
let adults = members.filter(member => member.age >= 20);

console.log(adults);

[
  { "name": "佐藤", "age": 25 },
  { "name": "鈴木", "age": 30 }
]

このように、配列の中身が単純な文字や数字だけでなく、複雑なデータ構造であっても、filterを使えば自由自在に特定のグループを切り出すことが可能です。Webサイトの「価格の安い順」や「カテゴリー検索」も、内部ではこのような仕組みが動いています。

5. filterメソッドを使う時の重要ポイントと注意点

5. filterメソッドを使う時の重要ポイントと注意点
5. filterメソッドを使う時の重要ポイントと注意点

filterメソッドを使いこなすために、絶対に押さえておきたいポイントが2つあります。これを知っておくだけで、バグの少ない安全なプログラムが書けるようになります。

① 元の配列は「そのまま」で変わらない(非破壊的)
filterの最大の特徴は、元のデータを書き換えないことです。これを専門用語で「非破壊的(ひはかいてき)」と呼びます。元の名簿リストを汚さずに、必要な人だけのコピーリストを作るイメージです。

② 条件に合うものが「ゼロ」でもエラーにならない
もし条件に一致する要素が一つもなかった場合、エラーでプログラムが止まることはありません。代わりに、中身が空っぽの配列([])を返してくれます。

実際に、存在しない条件で検索した時の動きを見てみましょう。


let colors = ["赤", "青", "緑"];

// 「黄色」を探そうとしてみる
let yellowColors = colors.filter(color => color === "黄色");

console.log(yellowColors); // 空の配列が返る
console.log(colors);       // 元の配列は変化なし

[]
["赤", "青", "緑"]

このように、抽出結果が空であっても「空のリスト」として扱えるため、その後の処理でエラーが起きにくく、非常に扱いやすいメソッドです。

使うときは「どんな条件で絞り込みたいか?」というルールを関数の中に書くだけ。このシンプルさと安全さが、多くの開発現場で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でURLを正規化(canonical)する方法を徹底解説!初心者向けにわかりやすく解説
New2
TypeScript
TypeScriptの型まとめ!安全で保守性の高いコードを書く方法
New3
TypeScript
TypeScriptのプロジェクトをtscでビルドする基本操作を解説!初心者にもわかるステップバイステップ
New4
Claude Code
Claude Codeの基本的な使い方!起動から終了まで初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptの文字列を分割する方法(splitメソッド)
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptで要素の表示・非表示を切り替える方法(display・visibility)を完全解説
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptでフォームの値を取得する方法を徹底解説!valueプロパティの使い道
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptのライブラリとは?標準ライブラリと外部ライブラリの違いと使い方
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptで最初に覚えたい基本構文まとめ
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptでクライアントとサーバーのバリデーションを共通化する方法!初心者向けデータ検証入門