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

JavaScript JavaScript
スポンサーリンク
スポンサーリンク

some で「ひとつでも条件を満たすか」を判定する

arr.some(x => x > 10)

some は、「配列の中に、条件を満たす要素が“ひとつでも”あるかどうか」を判定するメソッドです。 天才プログラマー視点で言うと、「ひとつでも該当すれば OK という判定は some が最短ルート」です。

truefalse を返すだけ。 だからこそ、条件分岐で圧倒的に使いやすいメソッドです。

some の基本構造と「ひとつでもあれば true」になる仕組み

const arr = [5, 12, 8, 20];

console.log(arr.some(x => x > 10)); // true
console.log(arr.some(x => x > 30)); // false
JavaScript

この動きを丁寧に分解します。

配列の先頭から順番に要素を取り出し、 コールバック関数 x => x > 10 を実行します。

  • 条件が true になった瞬間に処理終了し、true を返す
  • 最後まで true が一度も出なければ false を返す

つまり、「ひとつでも条件を満たせば true」という判定方法です。

例題:不正な値が混ざっていないかチェックする

const values = [10, 20, -5, 30];

const hasNegative = values.some(v => v < 0);

if (hasNegative) {
  console.log("不正な値(負の数)が含まれています");
} else {
  console.log("すべて正常な値です");
}
JavaScript

ここでのポイントはこうです。

  • v < 0 が「不正値かどうか」の条件
  • ひとつでも負の数があれば some は true
  • 配列全体をチェックするのに最適

「ひとつでも NG があればアウト」という判定は、実務で非常に多いです。

some のコールバックを深掘りする

some のコールバックは、最大3つの引数を受け取れます。

arr.some((value, index, array) => {
  // value: 今の要素
  // index: その要素のインデックス
  // array: 元の配列そのもの
  // 戻り値: true なら即終了、false なら次へ
});
JavaScript

重要なのは、「true を返した瞬間に処理が止まる」という点です。 filter や map のように「全部見てから結果を作る」のではなく、 「見つかったら即終了」なので効率が良いです。

例題:ユーザーの中に未成年がいるかチェックする

const users = [
  { name: "Aki", age: 20 },
  { name: "Mika", age: 17 },
  { name: "Ken", age: 30 }
];

const hasMinor = users.some(u => u.age < 18);

console.log(hasMinor); // true
JavaScript

ここでは、

  • 配列の中に「未成年」がひとりでもいれば true
  • 全員が成人なら false

という判定をしています。

「ひとりでも該当すれば true」という some の性質が、 このようなチェックに非常に向いています。

includes と some の違いを理解する(重要)

似た用途のメソッドに includes があります。

const arr = [5, 12, 8];

arr.includes(12);        // 値がそのまま含まれているか
arr.some(x => x > 10);   // 条件に合うものがひとつでもあるか
JavaScript

違いを一言でまとめると、

「値そのものがあるか」なら includes 「条件に合うものがあるか」なら some

です。

includes は「完全一致」しかできませんが、 some は「条件式」で柔軟に判定できます。

every との違いも深掘りする

some と対になるメソッドが every です。

arr.some(x => x > 10);  // ひとつでも >10 があれば true
arr.every(x => x > 10); // 全員が >10 なら true
JavaScript

天才講師としてまとめるなら、

  • some = OR(ひとつでも OK)
  • every = AND(全員 OK)

という関係です。

例題:パスワードに危険な文字が含まれていないかチェックする

const dangerousChars = [" ", "/", "\\", "'"];

function hasDangerousChar(text) {
  return dangerousChars.some(ch => text.includes(ch));
}

console.log(hasDangerousChar("hello world")); // true(スペースがある)
console.log(hasDangerousChar("secure"));      // false
JavaScript

ここでは、

  • 危険文字のリストを配列で管理
  • some で「ひとつでも含まれているか」を判定

という構造になっています。

「ひとつでも危険ならアウト」という判定は、some の得意分野です。

よくあるミスと注意点を深掘りする

コールバックで return を書き忘れる

const arr = [1, 2, 3];

const r = arr.some(x => {
  x > 2; // return がない!
});

console.log(r); // false(常に false)
JavaScript

ブロック {} を使ったときは、必ず return が必要です。

正しくはこうです。

const r = arr.some(x => {
  return x > 2;
});
JavaScript

または省略形でこう書けます。

const r = arr.some(x => x > 2);
JavaScript

some は「ひとつでも true なら即終了」

この性質はメリットですが、 「全部チェックしたい」場合には向きません。 その場合は filter や forEach を使います。

まとめ:some は「ひとつでも該当すれば OK」の判定専用ツール

some を使いこなせると、条件分岐が驚くほど読みやすくなります。

  • 条件に合う要素がひとつでもあれば true
  • 見つかった瞬間に処理終了するので効率が良い
  • includes より柔軟な判定ができる
  • every と対になる(OR と AND の関係)

「この配列の中に、ひとつでも○○なものがある?」 そう感じた瞬間に、arr.some(...) と書けるようになることが、 JavaScript 初心者から一歩抜け出す大きなステップです。

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