JavaScript | 配列の要素を条件で調べる便利メソッドまとめ

JavaScript JavaScript
スポンサーリンク

では 初心者向けにやさしく、例題つきで丁寧に説明します。コードは全部ブラウザでそのまま動かせるので、コピーして試してみてください。

基本の考え方(まずはイメージ)

配列に対して「この要件を満たす要素はあるかな?」と聞くときに使うメソッドが今回の4つです。

  • find → 条件を満たす 最初の要素の値 を返す(なければ undefined)。
  • findIndex → 条件を満たす 最初の要素のインデックス(位置) を返す(なければ -1)。
  • some1つでも条件を満たす要素があるか を調べる(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つだけ(返り値は単一の要素 or undefined)。
  • 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) => { ... })
JavaScript
  • element:現在見ている要素
  • index:その要素のインデックス
  • array:元の配列(必要なら参照できる)

よくある間違い(注意)

  • find の結果を if (res) で判定すると、見つかった値が 0"" の場合に誤判定することがある。undefined と比較するか、res !== undefined を使うと安全。
  • every は空配列に対して true を返す(空集合に対する論理的な性質)。予期せぬ挙動になる場合は先に length を確認する。

練習問題

  1. 配列 [3, 7, 12, 5] の中で最初に 10 より大きい数を find で取得してみてください。答えは?
  2. ユーザー配列で id === 4 のユーザーがいるか some で調べてください。
  3. 数値配列 [2,4,6] に対して every(n => n % 2 === 0) の結果は?

答えと解説

  1. 12find は最初に条件を満たす要素を返す)
  2. falsesome は条件を満たす要素が1つもいなければ false
  3. true(全て偶数なので everytrue

まとめ(選び方の目安)

  • 「最初に見つけた要素が欲しい」→ find
  • 「その要素の位置が知りたい」→ findIndex
  • 「存在するかだけ知りたい」→ some
  • 「全部が条件を満たすか調べたい」→ every
タイトルとURLをコピーしました