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
共通要素あり: truesome()とevery()の関係
some()は「1つでも条件を満たすか」、every()は「すべてが条件を満たすか」を判定します。論理的には!array.some(条件)は「すべてが条件を満たさない」と等価で、!array.every(条件)は「少なくとも1つが条件を満たさない」と等価です。
注意点
some()は要素の存在確認には使えますが、該当する要素自体を取得することはできません。要素が必要な場合はfind()を使ってください。また、includes()で済む単純な値の存在チェックにはsome()を使う必要はありません。
まとめ
some()は条件を満たす要素が1つでもあればtrueを返す- 見つかった時点で検索を停止するため効率的
- 空の配列に対しては常に
falseを返す - バリデーションや権限チェックに最適
- 要素自体が必要な場合は
find()を使う