組み込み関数

JavaScriptのsome()入門|条件を満たす要素があるか判定する

some()は、配列の中に条件を満たす要素が1つでもあるかどうかを判定するメソッドです。戻り値はtrueまたはfalseのブール値です。バリデーションや権限チェックなど、「少なくとも1つ該当するか」を確認する場面で活躍します。

基本的な使い方

some()はコールバック関数がtrueを返す要素が1つでもあればtrueを返します。見つかった時点で検索を停止するため、配列全体を走査しない場合があります。

JavaScript
// 基本構文
const result = array.some(function(element, index, array) {
  return 条件式;
});

// アロー関数を使った書き方
const result = array.some(element => 条件式);

空の配列に対してsome()を呼ぶと、常にfalseが返されます。これは「条件を満たす要素が1つもない」という論理的に正しい結果です。

JavaScript
const numbers = [1, 3, 5, 7, 8, 9];

// 偶数が含まれているか
const hasEven = numbers.some(num => num % 2 === 0);
console.log(hasEven);

// 100以上の数が含まれているか
const hasLarge = numbers.some(num => num >= 100);
console.log(hasLarge);

// 空配列の場合
const empty = [].some(x => x > 0);
console.log(empty);
実行結果
true
false
false

オブジェクト配列での判定

実務では、ユーザーリストの中に管理者がいるか、商品リストの中に在庫切れがあるか、といった判定でsome()が使われます。

JavaScript
const users = [
  { name: "田中", role: "viewer", active: true },
  { name: "佐藤", role: "admin", active: true },
  { name: "鈴木", role: "editor", active: false }
];

// 管理者がいるか判定
const hasAdmin = users.some(user => user.role === "admin");
console.log("管理者あり:", hasAdmin);

// 非アクティブなユーザーがいるか
const hasInactive = users.some(user => !user.active);
console.log("非アクティブあり:", hasInactive);

// アクティブな管理者がいるか(複合条件)
const hasActiveAdmin = users.some(user => user.role === "admin" && user.active);
console.log("アクティブ管理者あり:", hasActiveAdmin);
実行結果
管理者あり: true
非アクティブあり: true
アクティブ管理者あり: true

実践的な活用例

some()はフォームバリデーションや配列同士の比較、条件分岐の判定に使えます。

JavaScript
// フォームバリデーション:エラーがあるか判定
const formFields = [
  { name: "email", value: "test@example.com", error: null },
  { name: "password", value: "", error: "パスワードは必須です" },
  { name: "name", value: "田中", error: null }
];

const hasErrors = formFields.some(field => field.error !== null);
console.log("エラーあり:", hasErrors);

if (hasErrors) {
  console.log("フォームにエラーがあります。送信できません。");
}

// 配列に特定の値が含まれるか(includes()の代替で複雑な条件)
const permissions = ["read", "write", "delete"];
const canModify = permissions.some(p => ["write", "admin"].includes(p));
console.log("編集権限あり:", canModify);

// 2つの配列に共通要素があるか
const arr1 = [1, 2, 3, 4];
const arr2 = [5, 6, 3, 7];
const hasCommon = arr1.some(val => arr2.includes(val));
console.log("共通要素あり:", hasCommon);
実行結果
エラーあり: true
フォームにエラーがあります。送信できません。
編集権限あり: true
共通要素あり: true
some()とevery()の関係

some()は「1つでも条件を満たすか」、every()は「すべてが条件を満たすか」を判定します。論理的には!array.some(条件)は「すべてが条件を満たさない」と等価で、!array.every(条件)は「少なくとも1つが条件を満たさない」と等価です。

注意点

some()は要素の存在確認には使えますが、該当する要素自体を取得することはできません。要素が必要な場合はfind()を使ってください。また、includes()で済む単純な値の存在チェックにはsome()を使う必要はありません。

まとめ

  • some()は条件を満たす要素が1つでもあればtrueを返す
  • 見つかった時点で検索を停止するため効率的
  • 空の配列に対しては常にfalseを返す
  • バリデーションや権限チェックに最適
  • 要素自体が必要な場合はfind()を使う