JavaScript配列のいずれか判定(some)の基本と実践
「条件に合う要素がひとつでもある?」を真っ直ぐに確かめるなら some。true/falseだけ返すので、存在チェックやバリデーションに向いています。
構文と考え方
// 基本
const result = arr.some((value, index, array) => {
// 条件式(true/false)を返す
return /* 条件式 */;
});
// this を指定したい場合(省略可)
const result = arr.some(callback, thisArg);
JavaScript- 返り値: 条件に合う要素が1つでもあればtrue、なければfalse。
- 特徴: 最初のtrueが出た時点で処理を終了(早期終了)。全要素がfalseなら最後まで評価。
- 主な用途: 入力チェック、権限・フラグ確認、部分一致検索など「存在判定」。
すぐ使えるテンプレート集
数値の閾値チェック(基本)
const nums = [5, 12, 8, 130, 44];
const hasOver10 = nums.some(n => n > 10);
console.log(hasOver10); // true
JavaScript- ポイント: 「どれかが条件を満たすか」だけに集中できる。
文字列の部分一致(大小文字無視)
const names = ["Aki", "Mao", "Ren", "Mika"];
const query = "mi";
const found = names.some(n => n.toLowerCase().includes(query.toLowerCase()));
console.log(found); // true("Mika" に "mi" を含む)
JavaScript- ポイント: 事前に正規化(toLowerCase)すればケース差を吸収できる。
オブジェクト配列で条件存在チェック
const users = [
{ name: "Aki", age: 19 },
{ name: "Mao", age: 22 },
{ name: "Ren", age: 17 },
];
const hasAdult = users.some(u => u.age >= 20);
console.log(hasAdult); // true
JavaScript- ポイント: includesはプリミティブ向け、オブジェクト条件はsomeが直感的。
フォーム入力のバリデーション(空が1つでもある?)
const fields = ["name", "email", ""];
const hasEmpty = fields.some(f => !f || f.trim() === "");
console.log(hasEmpty); // true
JavaScript- ポイント: 「欠落が存在するか」を一発判定。
よくある落とし穴と対策
- true/false以外を返してしまう問題
- 症状: コールバックが値を返さない、または意図しない真偽値を返す。
- 対策: 条件式は必ず「真偽値」を返す。アロー関数は式戻りにしてreturn忘れを防ぐ。
- 全件処理したいのにsomeを使う問題
- 症状: 途中でtrueになり評価が止まるため、副作用が全要素に適用されない。
- 対策: 副作用中心ならforEach、集計ならreduceを選ぶ。
- 「全部満たす」をsomeで書く問題
- 症状: すべて満たすかの判定には向かない。
- 対策: 全要素が条件を満たすかはeveryを使う。
他メソッドとの使い分け
| 手段 | 返り値 | 主な用途 |
|---|---|---|
| some | true/false | 条件に合う要素が1つでも存在するか |
| every | true/false | 全要素が条件を満たすか |
| includes | true/false | プリミティブ値の存在確認 |
| find | 要素そのもの | 最初の一致要素の取得 |
| filter | 新配列 | 条件に合う要素をすべて抽出 |
練習問題(手を動かして覚える)
- 10より大きい数が1つでもあるか
const nums = [2, 5, 11, 3, 7];
console.log(nums.some(n => n > 10)); // true
JavaScript- 少なくとも1人が20歳以上か
const users = [{name:"Aki",age:19},{name:"Mao",age:22},{name:"Ren",age:17}];
console.log(users.some(u => u.age >= 20)); // true
JavaScript- NGワードを含む投稿があるか(部分一致+ケース無視)
const posts = ["Hello", "Nice day", "This is BAD"];
const ng = ["bad", "spam"];
const hasNg = posts.some(p => ng.some(w => p.toLowerCase().includes(w)));
console.log(hasNg); // true
JavaScript- 未完了のタスクが1つでもあるか
const todos = [{done:true},{done:false},{done:true}];
console.log(todos.some(t => !t.done)); // true
JavaScript直感的な指針
- 「ひとつでも満たす?」の存在確認: some。
- 「全部満たす?」の全体確認: every。
- 「何かがある」→値が欲しいなら: find。位置が欲しいなら findIndex。
