indexOf() / lastIndexOf() に続いて、includes()、find()、findIndex() は「配列から値や条件に合う要素を探す」ときによく使われるメソッドです。
初心者でも直感的に理解できるように、図解+例+実際の使いどころで説明します。
1. 配列検索メソッドの全体図
| メソッド名 | 探す方向 | 条件指定の方法 | 返すもの | 例 | 主な使いどころ |
|---|---|---|---|---|---|
indexOf() | 左から | 値(完全一致) | インデックス | 'a' → 0 | 値がある位置を調べたい |
lastIndexOf() | 右から | 値(完全一致) | インデックス | 'a' → 4 | 最後に出た位置を知りたい |
includes() | 左から | 値(完全一致) | 真偽値(true/false) | 'a' → true | 値が「あるかどうか」だけ知りたい |
find() | 左から | 条件(関数) | 見つかった要素 | 年齢20以上 → {name:'太郎', age:20} | 条件に合う「中身」がほしい |
findIndex() | 左から | 条件(関数) | 見つかった要素のインデックス | 年齢20以上 → 1 | 条件に合う「位置」がほしい |
2. イメージ図で理解!
【A】indexOf()/lastIndexOf()/includes()
🔹 値を直接指定して検索するタイプ
(「完全一致」==== 比較)
配列: ['🍎','🍌','🍎','🍒']
indexOf('🍎') → 0 (左から最初)
lastIndexOf('🍎') → 2 (右から最初)
includes('🍎') → true (存在するかどうか)
includes('🍍') → false
JavaScript🧠 イメージ図:
← 左から右へ ────────────────────→
🍎(0) 🍌(1) 🍎(2) 🍒(3)
↑indexOf('🍎') ↑lastIndexOf('🍎')
【B】find()/findIndex()
🔹 値ではなく、条件(関数) で検索するタイプ。
(中身を細かく調べたいときに最適)
const users = [
{ name: '太郎', age: 15 },
{ name: '花子', age: 20 },
{ name: '次郎', age: 25 }
];
// find: 条件に合う「要素」を返す
console.log(users.find(u => u.age >= 20));
// => { name: '花子', age: 20 }
// findIndex: 条件に合う「位置(インデックス)」を返す
console.log(users.findIndex(u => u.age >= 20));
// => 1
JavaScript🧠 イメージ図:
配列:
0:{太郎,15} 1:{花子,20} 2:{次郎,25}
↑ 最初に条件(age>=20)を満たす位置
find() → {花子,20}
findIndex() → 1
3. どう使い分ける?(実践ベストプラクティス)
| 目的 | おすすめメソッド | 理由 |
|---|---|---|
| 「値が含まれているか」だけ調べたい | ✅ includes() | 結果が true/false でシンプル |
| 「値がどこにあるか」調べたい | ✅ indexOf() | 最初の位置を知りたい |
| 「最後に出た位置」を知りたい | ✅ lastIndexOf() | 右から探せる |
| 「条件に合う中身(オブジェクト)」を取得したい | ✅ find() | 要素そのものを返す |
| 「条件に合う要素の位置」を知りたい | ✅ findIndex() | 条件を満たす最初の位置を返す |
4. 使い分けのリアル例
✅ 例1:TODOリストの中に「完了済み」があるか?
const todos = ['買い物', '掃除', '読書(完了)'];
console.log(todos.includes('掃除')); // true
JavaScript✅ 例2:特定の名前の人がリストにいるか(値検索)
const names = ['太郎', '花子', '次郎'];
console.log(names.indexOf('花子')); // 1
JavaScript✅ 例3:年齢20歳以上の最初の人を探す(条件検索)
const users = [
{ name: '太郎', age: 15 },
{ name: '花子', age: 20 },
{ name: '次郎', age: 25 }
];
const adult = users.find(u => u.age >= 20);
console.log(adult); // { name: '花子', age: 20 }
JavaScript✅ 例4:20歳以上の人がいるかどうかだけ知りたい
const hasAdult = users.some(u => u.age >= 20);
console.log(hasAdult); // true
JavaScript💡補足:「
some()」はfind()と似ていますが、「あるかないか」だけ調べて真偽値を返します。
5. まとめ図(これだけ覚えればOK)
┌─────────────────────────────────┐
│ 値で検索 │ 条件で検索 │
├────────┬────────────────────────┤
│ indexOf() │ findIndex() │ 位置を返す │
│ lastIndexOf()│ │ │
├────────┼────────────────────────┤
│ includes() │ find() │ 要素そのもの/存在を返す │
└────────┴────────────────────────┘
6. 初心者向けポイントまとめ
- 値を直接検索 →
includes()/indexOf()/lastIndexOf() - 条件で検索 →
find()/findIndex()(コールバック関数が必要) findは「中身そのもの」findIndexは「位置」- 存在チェックだけなら
includes()が一番シンプル!
