「配列の中に条件に合う要素が1 つでもあるか?」を判定する some と、「すべての要素が条件を満たすか?」を判定する every は、配列のバリデーションや条件チェックで頻出するメソッドです。この記事では some / every の基本から、includes・find・filter との使い分け、実務パターンまで体系的に解説します。
・some の基本構文と動作
・every の基本構文と動作
・some と every の違い(空配列の挙動を含む)
・includes / find / filter との使い分け
・短絡評価(早期リターン)のパフォーマンスメリット
・オブジェクト配列でのプロパティ条件検索
・フォームバリデーション・権限チェック・禁止ワード検出の実務パターン
some — いずれかの要素が条件に一致するか判定する
const result = array.some(callback(element, index, array)); // callback: 各要素に対して実行するテスト関数 // 戻り値: 1つでも true を返す要素があれば true、なければ false
const numbers = [1, 3, 5, 7, 8, 9]; // 偶数が含まれているか? console.log(numbers.some(n => n % 2 === 0)); // true(8が該当) // 10以上の数が含まれているか? console.log(numbers.some(n => n >= 10)); // false
some は条件に一致する要素が見つかった時点で即座に true を返して処理を終了します(短絡評価)。残りの要素は検査されないため、大きな配列でも効率的に動作します。
every — すべての要素が条件を満たすか判定する
const scores = [80, 85, 92, 70, 95]; // 全員60点以上か? console.log(scores.every(s => s >= 60)); // true // 全員90点以上か? console.log(scores.every(s => s >= 90)); // false(70, 80, 85が不合格)
every は条件に一致しない要素が見つかった時点で即座に false を返します。
some と every の違い
| 比較項目 | some | every |
|---|---|---|
| 意味 | いずれかが条件を満たす | すべてが条件を満たす |
| true を返す条件 | 1 つでも true がある | 全要素が true |
| false を返す条件 | 全要素が false | 1 つでも false がある |
| 短絡評価 | true が見つかったら停止 | false が見つかったら停止 |
| 空配列 | false |
true |
| 論理演算のイメージ | OR(||) | AND(&&) |
空配列での挙動に注意
const empty = []; console.log(empty.some(x => x > 0)); // false(要素がないので「1つもない」) console.log(empty.every(x => x > 0)); // true(要素がないので「反例がない」)
every が true を返すのは直感に反しますが、数学的には「空集合に対する全称命題は常に真」という仕様です。空配列のチェックが必要な場合は arr.length > 0 && arr.every(fn) としてください。includes / find / filter との使い分け
| メソッド | 戻り値 | 用途 | 条件の指定 |
|---|---|---|---|
some(fn) |
true / false |
条件に合う要素があるかどうか | コールバック関数 |
every(fn) |
true / false |
全要素が条件を満たすか | コールバック関数 |
includes(val) |
true / false |
特定の値が含まれるか | 値の一致(===) |
find(fn) |
要素 or undefined |
条件に合う要素自体を取得 | コールバック関数 |
findIndex(fn) |
インデックス or -1 |
条件に合う位置を取得 | コールバック関数 |
filter(fn) |
新しい配列 | 条件に合う全要素を取得 | コールバック関数 |
const users = [
{ id: 1, name: "田中", active: true },
{ id: 2, name: "鈴木", active: false },
{ id: 3, name: "佐藤", active: true }
];
// アクティブなユーザーがいるか? → some
users.some(u => u.active); // true
// 全員アクティブか? → every
users.every(u => u.active); // false
// 特定のIDが含まれるか? → some(オブジェクト配列なので includes は使えない)
users.some(u => u.id === 2); // true
// 特定のIDのユーザーを取得 → find
users.find(u => u.id === 2); // { id: 2, name: "鈴木", active: false }
// アクティブなユーザー全員を取得 → filter
users.filter(u => u.active); // [{ id: 1, ... }, { id: 3, ... }]
some、「要素自体」が必要なら find、「該当する全要素」が必要なら filter を使い分けましょう。オブジェクト配列でプロパティを条件に判定する
const products = [
{ name: "商品A", price: 500, inStock: true },
{ name: "商品B", price: 1200, inStock: false },
{ name: "商品C", price: 800, inStock: true }
];
// 在庫切れの商品があるか?
const hasOutOfStock = products.some(p => !p.inStock);
console.log(hasOutOfStock); // true
// 全商品が1000円以下か?
const allCheap = products.every(p => p.price <= 1000);
console.log(allCheap); // false(商品Bが1200円)
// 全商品が在庫ありか?
const allInStock = products.every(p => p.inStock);
console.log(allInStock); // false
実務でよく使うパターン
フォームバリデーション: 全フィールドが入力済みか?
function isFormValid(form) {
const fields = [...form.querySelectorAll("[required]")];
// 全 required フィールドが入力済みか
return fields.every(field => field.value.trim() !== "");
}
const form = document.getElementById("myForm");
form.addEventListener("submit", (e) => {
if (!isFormValid(form)) {
e.preventDefault();
alert("すべての必須項目を入力してください");
}
});
権限チェック: 必要な権限をすべて持っているか?
const userPermissions = ["read", "write", "delete"]; const requiredPermissions = ["read", "write"]; // 必要な権限をすべて持っているか const hasAllPermissions = requiredPermissions.every( perm => userPermissions.includes(perm) ); console.log(hasAllPermissions); // true // 少なくとも1つの権限を持っているか const hasAnyPermission = requiredPermissions.some( perm => userPermissions.includes(perm) ); console.log(hasAnyPermission); // true
禁止ワードの検出
const bannedWords = ["spam", "scam", "phishing"];
function containsBannedWord(text) {
const lower = text.toLowerCase();
return bannedWords.some(word => lower.includes(word));
}
console.log(containsBannedWord("This is a spam message")); // true
console.log(containsBannedWord("Hello World")); // false
配列の全要素が一意(重複なし)かチェックする
function isUnique(arr) {
return new Set(arr).size === arr.length;
}
// every を使った別解
function isUnique2(arr) {
return arr.every((val, i) => arr.indexOf(val) === i);
}
console.log(isUnique([1, 2, 3])); // true
console.log(isUnique([1, 2, 2, 3])); // false
API レスポンスのエラーチェック
const responses = [
{ status: 200, data: "OK" },
{ status: 200, data: "OK" },
{ status: 500, data: "Error" }
];
// 全リクエストが成功したか
const allSuccess = responses.every(r => r.status === 200);
console.log(allSuccess); // false
// 1つでもエラーがあるか
const hasError = responses.some(r => r.status >= 400);
console.log(hasError); // true
関連記事
- includes の使い方 — 配列・文字列の存在チェック
- 配列の map・filter・reduce の使い方
- 配列から条件に合う要素を取り出す方法
- 配列の使い方まとめ
- 配列の重複を削除する方法
- 配列を比較する方法
よくある質問
some は「OR(いずれか)」、every は「AND(すべて)」です。some は 1 つでも true があれば true、every は 1 つでも false があれば false を返します。arr.length > 0 && arr.every(fn) で空チェックを追加してください。includes は値の完全一致(===)でチェックします。オブジェクト配列のプロパティ条件や複雑な条件判定には some を使います。[1,2,3].includes(2) は OK ですが、[{id:1}].includes({id:1}) は false(参照比較)になるため some が必要です。some は条件に合う要素が見つかった時点で即座に true を返して停止します(短絡評価)。残りの要素は検査されないため、大きな配列でも効率的です。some は true/false しか返しません。個数を数えるには arr.filter(fn).length を使ってください。まとめ
some と every は配列の条件判定に使うメソッドです。
- some: いずれかが条件を満たす →
true(OR 的) - every: すべてが条件を満たす →
true(AND 的) - 短絡評価: 結果が確定した時点で残りをスキップ(高速)
- 空配列: some は false、every は true
- 使い分け: 存在チェック → some、全件チェック → every、要素取得 → find / filter
フォームバリデーション、権限チェック、禁止ワード検出、API エラー判定など、実務で「ある条件を満たす要素があるか?」を判定する場面ではまず some / every を検討しましょう。