配列の要素を「条件」で調べる基本
初心者がつまずきやすいのは、「値そのもの」と「位置(インデックス)」の違いです。配列には、条件に合う要素を探すためのメソッドがいくつかあり、それぞれ「返してくれるもの」が違います。ここを押さえれば混乱が減ります。
4つの定番メソッドの役割
findIndex(条件に合う最初の位置を返す)
- 役割: 条件に合う最初の要素のインデックス(位置)を返す
- 戻り値: 見つからないときは
-1 - 使いどころ: 「何番目にあるか」を知りたいとき
const scores = [75, 68, 92, 84, 90];
const idx = scores.findIndex(score => score > 85);
console.log(idx); // 2(92は配列の2番目 = 0,1,2...)
JavaScriptfind(条件に合う最初の値を返す)
- 役割: 条件に合う最初の要素の「値」を返す
- 戻り値: 見つからないときは
undefined - 使いどころ: 「実際の値」を取り出したいとき
const scores = [75, 68, 92, 84, 90];
const val = scores.find(score => score > 85);
console.log(val); // 92
JavaScriptsome(1つでも条件に合えば true)
- 役割: 条件を満たす要素が「少なくとも1つあるか」をチェック
- 戻り値:
trueまたはfalse - 使いどころ: 「一部一致」かどうかの判定
const scores = [75, 68, 92, 84, 90];
console.log(scores.some(score => score > 85)); // true(92がある)
console.log(scores.some(score => score < 60)); // false
JavaScriptevery(全部が条件に合えば true)
- 役割: すべての要素が条件を満たすかをチェック
- 戻り値:
trueまたはfalse - 使いどころ: 「全一致」かどうかの判定
const scores = [75, 68, 92, 84, 90];
console.log(scores.every(score => score > 60)); // true
console.log(scores.every(score => score < 90)); // false(92がある)
JavaScriptつまずきやすいポイントの整理
- 返ってくるものの違い:
- findIndex: インデックス(数字)
- find: 値そのもの(要素)
- some / every: 真偽値(true/false)
- 「最初のひとつ」しか見ない:
- find / findIndex は最初に見つかった1個だけ。複数取り出したいなら
filterを使う。
- find / findIndex は最初に見つかった1個だけ。複数取り出したいなら
- 見つからないときの挙動:
- findIndex:
-1 - find:
undefined - some / every: 条件次第で
true/false(「見つからない」ではなく「判定の結果」)
- findIndex:
例題で身につける
例題1:会員リストから「初回購入が1万円超」の人の位置を調べる(findIndex)
- 状況: 会員の初回購入金額の配列がある
- 目的: 最初に1万円を超えた人が何番目か知りたい
const firstPurchases = [2500, 8000, 12000, 5000];
const pos = firstPurchases.findIndex(amount => amount > 10000);
console.log(pos); // 2(0,1,2... 3番目の人)
JavaScript- ポイント: インデックスが分かれば、その人の名前など別の配列と組み合わせて参照できる。
例題2:在庫リストから「賞味期限切れの最初の商品」を見つける(find)
- 状況: 商品オブジェクト配列(名前と期限)
- 目的: 最初に期限切れの商品を取り出す
const products = [
{ name: 'Milk', expires: '2025-10-01' },
{ name: 'Yogurt', expires: '2025-11-05' },
{ name: 'Cheese', expires: '2025-09-30' },
];
const today = new Date('2025-10-27');
const expired = products.find(p => new Date(p.expires) < today);
console.log(expired); // { name: 'Milk', ... } など(例)
JavaScript- ポイント:
findなら「商品オブジェクトまるごと」取れるので、名前や数量にもすぐアクセスできる。
例題3:チャットメッセージにNGワードが含まれているかを確認(some)
- 状況: NGワードの一覧と、投稿文がある
- 目的: 投稿前チェックで警告を出す
const ngWords = ['暴言', '差別', 'スパム'];
const message = '今日は少しスパムっぽい内容が多いね';
const hasNg = ngWords.some(word => message.includes(word));
console.log(hasNg); // true
JavaScript- ポイント: 1つでも含まれていれば
true。即座にアラートを出せる。
例題4:テストの合格判定(every)
- 状況: 複数科目の点数がある
- 目的: 全科目が合格点(60点以上)なら「合格」
const scores = [78, 61, 90, 73];
const isPass = scores.every(s => s >= 60);
console.log(isPass); // true
JavaScript- ポイント: ひとつでも落としていれば
false。合否の一発判定に便利。
よくあるミスと回避策
- ミス: findで「全部」取りたい
- 回避策: 複数取り出すなら
filterを使う(条件に合う全部の配列を返す)
- 回避策: 複数取り出すなら
const numbers = [1, 4, 7, 10, 13];
const overFiveAll = numbers.filter(n => n > 5);
console.log(overFiveAll); // [7, 10, 13]
JavaScript- ミス: findIndexの結果を、そのまま要素として使う
- 回避策: インデックスを使って配列から値を取り出す
const idx = numbers.findIndex(n => n === 10);
const value = numbers[idx]; // 10
JavaScript- ミス: 見つからないときの処理を忘れる
- 回避策:
-1やundefinedをチェックしてから使う
- 回避策:
const userIdx = ['a', 'b', 'c'].findIndex(u => u === 'd');
if (userIdx === -1) {
console.log('見つかりませんでした');
}
JavaScript練習問題
- 問題1: 配列
temps = [18, 22, 27, 31, 29]から、最初に 30 以上になった温度の「位置」を求めて表示する。- 期待する出力のヒント: 0から数えると3番目
- 問題2: 配列
users = [{id:1, active:true}, {id:2, active:false}, {id:3, active:false}]から、最初の「非アクティブユーザー」を見つけてidを表示する。 - 問題3: 文字列
title = 'JavaScript入門 完全ガイド'とキーワード配列keys = ['入門', '基礎', '応用']を使い、someでタイトルにキーワードが含まれるか判定する。 - 問題4: 配列
prices = [1200, 980, 1500, 1300]が「すべて1000以上」かどうかをeveryで判定する。
解答と解説
問題1
配列 temps = [18, 22, 27, 31, 29] から、最初に 30 以上になった温度の「位置」を求める
const temps = [18, 22, 27, 31, 29];
const pos = temps.findIndex(t => t >= 30);
console.log(pos); // 3
JavaScript- 解説:
findIndexは「条件に合う最初のインデックス」を返す。31が最初に 30 以上なので、インデックスは3(0から数える)。
問題2
配列 users = [{id:1, active:true}, {id:2, active:false}, {id:3, active:false}] から、最初の「非アクティブユーザー」を見つけて id を表示する
const users = [
{id:1, active:true},
{id:2, active:false},
{id:3, active:false}
];
const inactiveUser = users.find(u => u.active === false);
console.log(inactiveUser.id); // 2
JavaScript- 解説:
findは「条件に合う最初の要素そのもの」を返す。- 最初に
active:falseなのはid:2のユーザー。
問題3
文字列 title = 'JavaScript入門 完全ガイド' とキーワード配列 keys = ['入門', '基礎', '応用'] を使い、some でタイトルにキーワードが含まれるか判定する
const title = 'JavaScript入門 完全ガイド';
const keys = ['入門', '基礎', '応用'];
const hasKeyword = keys.some(k => title.includes(k));
console.log(hasKeyword); // true
JavaScript- 解説:
someは「1つでも条件に合えば true」。title.includes(k)で文字列に含まれるかを判定。'入門'が含まれているのでtrue。
問題4
配列 prices = [1200, 980, 1500, 1300] が「すべて1000以上」かどうかを every で判定する
const prices = [1200, 980, 1500, 1300];
const allOver1000 = prices.every(p => p >= 1000);
console.log(allOver1000); // false
JavaScript- 解説:
everyは「すべての要素が条件を満たすか」を判定。980が 1000 未満なのでfalse。
まとめ
- findIndex → 条件に合う最初の「位置」
- find → 条件に合う最初の「値」
- some → 1つでも条件に合えば
true - every → 全部条件を満たせば
true
👉 ここまで理解できたら、次のステップは filter を使って「条件に合う要素を全部取り出す」練習をするとさらに応用力がつきます。
