JavaScript 逆引き集 | some でいずれか判定

JavaScript JavaScript
スポンサーリンク

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を使う。

他メソッドとの使い分け

手段返り値主な用途
sometrue/false条件に合う要素が1つでも存在するか
everytrue/false全要素が条件を満たすか
includestrue/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。

タイトルとURLをコピーしました