では 初心者向けにやさしく、例題つきで丁寧に説明します。コードは全部ブラウザでそのまま動かせるので、コピーして試してみてください。
基本の考え方(まずはイメージ)
配列に対して「この要件を満たす要素はあるかな?」と聞くときに使うメソッドが今回の4つです。
find→ 条件を満たす 最初の要素の値 を返す(なければundefined)。findIndex→ 条件を満たす 最初の要素のインデックス(位置) を返す(なければ-1)。some→ 1つでも条件を満たす要素があるか を調べる(true/false)。every→ 全ての要素が条件を満たすか を調べる(true/false)。
どれも「配列を先頭から順に調べて、条件が合えばそこで処理を終える(早期終了する)」という共通の振る舞いです。
1. find() — 最初に見つかった要素を返す
const nums = [10, 25, 30, 42];
const result = nums.find(n => n > 20);
console.log(result); // 25
JavaScript説明:n => n > 20 が最初に true になる要素は 25 なので 25 が返ります。条件に合うものがなければ undefined。
注意ポイント
- 複数見つかっても 最初の1つだけ を返す。
- 返り値が
undefinedのときは「見つからなかった」と判断する。
2. findIndex() — 最初に見つかった要素の位置(0始まり)
const nums = [10, 25, 30, 42];
const idx = nums.findIndex(n => n > 20);
console.log(idx); // 1
JavaScript説明:25 は配列の2番目(インデックスは 1)なので 1。見つからなければ -1。
使いどころ
- 要素を削除したいとき(位置がわかれば
spliceが使える)。 - 要素の更新で位置が必要なとき。
3. some() — 条件を満たすものが「1つでも」あるか
const ages = [16, 21, 17, 30];
console.log(ages.some(a => a >= 18)); // true
JavaScript説明:配列の中に18以上があれば true。最初に true が出たらそこまでで終了。
よくある用途
- バリデーション(例:入力配列に未入力がないかチェック)。
- 条件に合う要素の有無だけ知りたい場合。
4. every() — 全てが条件を満たすか
const scores = [70, 85, 90];
console.log(scores.every(s => s >= 60)); // true
JavaScript説明:全て 60 以上なら true。1つでも false があれば即 false。
違いのイメージ
someは「誰か一人でも合格した?」everyは「全員合格した?」という感じ。
オブジェクト配列での実例(実務でよく使うパターン)
const users = [
{ id: 1, name: "Aki", active: false },
{ id: 2, name: "Bota", active: true },
{ id: 3, name: "Coco", active: true },
];
// find: 最初にactiveなユーザーを取得
const firstActive = users.find(u => u.active);
console.log(firstActive); // { id:2, name:"Bota", ... }
// findIndex: そのユーザーの配列位置
const idx = users.findIndex(u => u.id === 3);
console.log(idx); // 2
// some: 有効なユーザーがいるか
console.log(users.some(u => u.active)); // true
// every: 全員有効か
console.log(users.every(u => u.active)); // false
JavaScript補足:find はオブジェクトそのもの(参照)を返すので、そのままプロパティを書き換えると元の配列が変わります。
find と filter の違い(よく混同するポイント)
findは 最初の1つだけ(返り値は単一の要素 orundefined)。filterは 条件を満たす すべての要素を配列で返す(返り値は配列、見つからなければ空配列[])。
例:
const nums = [1,2,3,4,5,6];
nums.find(n => n % 2 === 0); // 2
nums.filter(n => n % 2 === 0); // [2,4,6]
JavaScriptコールバック関数の引数(覚えておくと便利)
コールバックに渡される典型的な引数は次の通り(全部使う必要はない):
array.find((element, index, array) => { ... })
JavaScriptelement:現在見ている要素index:その要素のインデックスarray:元の配列(必要なら参照できる)
よくある間違い(注意)
findの結果をif (res)で判定すると、見つかった値が0や""の場合に誤判定することがある。undefinedと比較するか、res !== undefinedを使うと安全。everyは空配列に対してtrueを返す(空集合に対する論理的な性質)。予期せぬ挙動になる場合は先にlengthを確認する。
練習問題
- 配列
[3, 7, 12, 5]の中で最初に10より大きい数をfindで取得してみてください。答えは? - ユーザー配列で
id === 4のユーザーがいるかsomeで調べてください。 - 数値配列
[2,4,6]に対してevery(n => n % 2 === 0)の結果は?
答えと解説
12(findは最初に条件を満たす要素を返す)false(someは条件を満たす要素が1つもいなければfalse)true(全て偶数なのでeveryはtrue)
まとめ(選び方の目安)
- 「最初に見つけた要素が欲しい」→
find - 「その要素の位置が知りたい」→
findIndex - 「存在するかだけ知りたい」→
some - 「全部が条件を満たすか調べたい」→
every
