【JavaScript】some / every の使い方|配列の条件判定・includes / find との違い・短絡評価・オブジェクト配列の検索まで解説

「配列の中に条件に合う要素が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(&&)

空配列での挙動に注意

JavaScript
const empty = [];

console.log(empty.some(x => x > 0));  // false(要素がないので「1つもない」)
console.log(empty.every(x => x > 0)); // true(要素がないので「反例がない」)
空配列で everytrue を返すのは直感に反しますが、数学的には「空集合に対する全称命題は常に真」という仕様です。空配列のチェックが必要な場合は 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 を使い分けましょう。

オブジェクト配列でプロパティを条件に判定する

JavaScript
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

実務でよく使うパターン

フォームバリデーション: 全フィールドが入力済みか?

JavaScript
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("すべての必須項目を入力してください");
  }
});

権限チェック: 必要な権限をすべて持っているか?

JavaScript
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

禁止ワードの検出

JavaScript
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

配列の全要素が一意(重複なし)かチェックする

JavaScript
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 レスポンスのエラーチェック

JavaScript
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

関連記事

よくある質問

Qsome と every の違いを一言で言うと?
Asome は「OR(いずれか)」、every は「AND(すべて)」です。some は 1 つでも true があれば true、every は 1 つでも false があれば false を返します。
Q空配列で every が true を返すのはなぜですか?
A数学的に「空集合に対する全称命題は常に真」という仕様に基づいています。実用上問題になる場合は arr.length > 0 && arr.every(fn) で空チェックを追加してください。
Qsome と includes はどう使い分けますか?
Aincludes値の完全一致(===)でチェックします。オブジェクト配列のプロパティ条件や複雑な条件判定には some を使います。[1,2,3].includes(2) は OK ですが、[{id:1}].includes({id:1}) は false(参照比較)になるため some が必要です。
Qsome は条件に合う要素が見つかったら全要素を検査しますか?
Aいいえ。some は条件に合う要素が見つかった時点で即座に true を返して停止します(短絡評価)。残りの要素は検査されないため、大きな配列でも効率的です。
Qsome で条件に合う要素が何個あるかを数えるには?
Asome は true/false しか返しません。個数を数えるには arr.filter(fn).length を使ってください。

まとめ

someevery は配列の条件判定に使うメソッドです。

  • some: いずれかが条件を満たす → true(OR 的)
  • every: すべてが条件を満たす → true(AND 的)
  • 短絡評価: 結果が確定した時点で残りをスキップ(高速)
  • 空配列: some は false、every は true
  • 使い分け: 存在チェック → some、全件チェック → every、要素取得 → find / filter

フォームバリデーション、権限チェック、禁止ワード検出、API エラー判定など、実務で「ある条件を満たす要素があるか?」を判定する場面ではまず some / every を検討しましょう。