1. 途中の作品が見つかる
  2. 先頭の作品も見つかる
  3. 一致しないタイトルは undefined
  4. 空配列でも止まらず undefined
コース一覧
JavaScript基礎文法:処理を組み立てる
find と includes で探す

JavaScript基礎文法:処理を組み立てる

if・switch による条件分岐、配列とループ、関数とコールバック、オブジェクトを順に組み立てる全 33 レッスン(525 分)の基礎文法コースです。FizzBuzz、作品リスト、関数への整理、作品データの構造化を通して、入力から結果を返す処理を自分で分解して書きます。DOM 操作は次のコースで扱います。

1
条件分岐
01. if 文の基本15分
02. if / else if / else で段階判定15分
03. switch 文で値を一覧から選ぶ15分
04. 条件を組み合わせる20分
05. FizzBuzz で複数条件を組み立てる20分
06. つくる 時間帯で挨拶を変える20分
07. 第1章まとめクイズ10分
2
配列とループ
01. 配列のきほん15分
02. 要素を足す・取り除く15分
03. for ループで合計を求める15分
04. for-of で配列を走査する15分
05. while で条件を満たす間くり返す15分
06. break と continue でループを制御する15分
07. つくる 作品リストを一覧にする20分
08. 第2章まとめクイズ10分
3
関数
01. 関数宣言15分
02. アロー関数15分
03. デフォルト引数15分
04. 早期 return でネストを浅くする15分
05. 変数のスコープ15分
06. コールバック関数15分
07. forEach で配列をまわす15分
08. つくる 処理を関数に整理する20分
09. 第3章まとめクイズ10分
4
オブジェクト
01. オブジェクトのきほん18分
02. オブジェクトで複数の値を返す16分
03. const と参照18分
04. ?. で安全に取り出す16分
05. 分割代入18分
06. スプレッド構文18分
07. find と includes で探す16分
08. つくる 作品データを構造化する25分
09. 第4章まとめクイズ10分

find と includes で探す

find と findIndex と includes
解説

このレッスンで分かること

  • find は条件に合う最初の要素を返し、無ければ undefined になります
  • 有無だけ知りたいときは includes か some を使います

探すたびに for と if を 6 行書く

オブジェクトの配列が扱えるようになると、次に欲しくなるのは検索です。ここまでの知識だけでも書けます。

JavaScript

function findByLevel(skills, level) { for (const skill of skills) { if (skill.level === level) { return skill; } } return undefined; }

動きますし読めます。ただ「配列から条件に合うものを 1 つ探す」はあまりにありふれた処理なので、専用のメソッドが最初から用意されています。

JavaScript

const skills = [ { label: "HTML", level: 3 }, { label: "CSS", level: 2 }, ]; console.log(skills.find((skill) => skill.level === 2)); // { label: "CSS", level: 2 }

find は第6章で覚えたコールバック関数を受け取り、要素を 1 つずつ渡してきます。コールバックが true を返した瞬間に走査を止めてその要素を返し、最後まで当たらなければ undefined を返します。100 件のうち 3 件目が当たれば、残りの 97 件は見に行きません。自分で for と return を書いたときと同じ効率です。

何が返ってきてほしいかで選ぶ

似た名前が並んでいるので、先に全体像を押さえます。

メソッド渡すもの戻り値見つからないとき
find(fn)条件の関数要素そのものundefined
findIndex(fn)条件の関数位置の数値-1
includes(値)値そのもの真偽値false
some(fn)条件の関数真偽値false

分かれ目は 2 つです。条件で探すのか値そのもので探すのか、そして何が返ってきてほしいのか。この 2 軸で選べば迷いません。

JavaScript

console.log(["HTML", "CSS"].includes("CSS")); // true console.log(skills.includes({ label: "CSS", level: 2 })); // false console.log(skills.some((skill) => skill.label === "CSS")); // true

includes は値そのものを渡して有無を判定します。ただしオブジェクトの配列では使えません。前のレッスンのとおり、見た目が同じでも置き場所が違えば別物と判定されるからです。オブジェクトの配列に対しては、条件で探す some を選びます。

見つからなかったときの戻り値が、道具ごとに違う

undefined と -1 と false。ここが最大の注意点です。find の戻り値は undefined になり得るので、そのままプロパティを読むと止まります。

JavaScript

const hit = skills.find((skill) => skill.label === "React"); console.log(hit.level); // TypeError で止まる console.log(hit?.level ?? 0); // 0 前のレッスンの ?. が効く

判定に使うなら find の結果を if にそのまま入れるのが素直です。見つかればオブジェクト、見つからなければ undefined なので、そのまま真偽の判定になります。

よくある間違い

  • findIndex の戻り値を if にそのまま入れる — 先頭で見つかった 0 は falsy、見つからなかった -1 は truthy です。判定が両方とも裏返ります。!== -1 と書いて区別してください
  • オブジェクトの配列に includes を使う — 何を渡しても false になります。条件で探す some か find に置き換えます

要件

  1. 関数名は findWorkByTitle、引数は works と title の 2 つ
  2. find を使い、work.title が引数の title と一致する要素を返すこと
  3. 比較は === の厳密比較で行うこと
  4. 見つからないときと空配列のときは undefined を返すこと

入出力例

findWorkByTitle([{"title":"プロフィールサイト","year":2026},{"title":"自己紹介カード","year":2026},{"title":"スキル一覧の表","year":2026}], "自己紹介カード") → {"title":"自己紹介カード","year":2026} findWorkByTitle([{"title":"プロフィールサイト","year":2026},{"title":"自己紹介カード","year":2026}], "プロフィールサイト") → {"title":"プロフィールサイト","year":2026} findWorkByTitle([{"title":"プロフィールサイト","year":2026}], "ブログ") → null findWorkByTitle([], "プロフィールサイト") → null

ヒント

`works.find(...)` にアロー関数を渡します。引数は要素 1 つです

答えは `return works.find((work) => work.title === title);` の 1 行です

`find` は見つからないと自分で `undefined` を返します。`if` で分岐する必要はありません

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • つくる 作品データを構造化する

    第 7 章の総仕上げです。作品オブジェクトの配列から件数と合計閲覧数と最新作をまとめた集計結果を返します。

  • 第4章まとめクイズ

    オブジェクトの作り方と読み方から、参照・分割代入・スプレッド・検索まで、第7章で扱った内容を 5 問で確かめます。

  • スプレッド構文

    ... で配列やオブジェクトの中身を展開する書き方です。元を壊さずにコピーや合成ができます。

  • 分割代入

    オブジェクトや配列から必要な値をまとめて変数に取り出す書き方です。既定値や名前の付け替えもできます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • オブジェクトキーと値のペアで構造を作るデータ
  • 配列サイズ固定の同型データの集まり
  • 処理計算や代入を表す長方形
  • メソッドクラスに属する関数
  • コールバック子から親へ通知するための関数 props
  • コールバック関数他の関数に引数として渡される関数。
  • 関数処理に名前を付けて再利用できる単位
  • 戻り値呼び出し元への返答を表す点線矢印
main.js
学習モード
エディタを読み込んでいます

メモ

find と includes で探す

⌘S で保存