JavaScript 逆引き集 | every で全件判定

JavaScript JavaScript
スポンサーリンク

JavaScript配列の全件判定(every)の基本と実践

「配列のすべてが条件を満たす?」を一度で確かめるなら every。すべてが条件に合えばtrue、1つでも合わなければfalseを返します。最初の不一致で評価を打ち切るため、無駄が少ないのも特徴です。


構文と考え方

// 基本
const result = arr.every((value, index, array) => {
  return /* 条件式(true/false) */;
});

// this を指定したい場合(省略可)
const result = arr.every(callback, thisArg);
JavaScript
  • 返り値: 全要素が条件を満たせばtrue、ひとつでも満たさなければfalse。
  • 評価の打ち切り: 途中でfalseが判定された時点で処理終了(早期終了)。
  • 引数: コールバックに最大3つ(value, index, array)が渡される。必要に応じてインデックスや元配列を参照できる。

すぐ使えるテンプレート集

数値がすべて正の数か(基本)

const nums = [5, 12, 8, 130, 44];
const allPositive = nums.every(n => n > 0);
console.log(allPositive); // true
JavaScript
  • ポイント: 全件判定。1つでも0以下があればfalse。

全員が20歳以上か(オブジェクト配列)

const users = [
  { name: "Aki", age: 21 },
  { name: "Mao", age: 22 },
  { name: "Ren", age: 20 },
];

const allAdult = users.every(u => u.age >= 20);
console.log(allAdult); // true
JavaScript
  • ポイント: プロパティ条件で全件チェック。存在確認ならsome、抽出ならfilterと使い分ける。

文字列がすべて非空か(トリム考慮)

const fields = ["name", "email", "hello"];
const allFilled = fields.every(s => typeof s === "string" && s.trim() !== "");
console.log(allFilled); // true
JavaScript
  • ポイント: フォーム入力のバリデーションに相性が良い。

複合条件(数値範囲)

const nums = [4, 5, 3];
const inRange = nums.every(n => n > 2 && n < 10);
console.log(inRange); // true
JavaScript
  • ポイント: AND条件で全件を一括チェック。

よくある落とし穴と対策

  • 「いずれか満たす」をeveryで書いてしまう: everyは「全件判定」。ひとつでも満たせば良い場合はsomeを使う。
  • 副作用目的で使う: everyは判定用。副作用(ログ・DOM操作など)はforEachなどを選ぶ。
  • 空配列の扱いを誤解する: 空配列に対するeveryは、条件に反する要素が存在しないためtrueを返す。論理的には「全て満たす」が成り立つ点に注意。
  • return忘れや真偽値以外の返却: コールバックはtrue/falseを返すこと。アロー関数の式戻りで短く書くと安全。

目的別の使い分け

  • 全件が条件を満たすか: every
  • ひとつでも満たすか: some
  • 値の存在(プリミティブ): includes
  • 最初の一致の値/位置: find / findIndex

練習問題(手を動かして覚える)

  • すべて10未満か
const nums = [1, 2, 3, 4, 5];
console.log(nums.every(n => n < 10)); // true
JavaScript
  • 全員がメールを持っているか(非空・文字列)
const users = [
  { name: "Aki", email: "a@example.com" },
  { name: "Mao", email: "m@example.com" },
  { name: "Ren", email: "r@example.com" },
];
console.log(users.every(u => typeof u.email === "string" && u.email.trim() !== "")); // true
JavaScript
  • フォーム項目に空が1つでもあるとfalse
const fields = ["name", "email", ""];
console.log(fields.every(f => f && f.trim() !== "")); // false
JavaScript
  • 数値がすべて偶数か
const nums = [2, 4, 6, 8];
console.log(nums.every(n => n % 2 === 0)); // true
JavaScript

直感的な指針

  • 「全部満たす?」ならevery。「ひとつでも?」ならsome。 迷ったら“全件か、いずれかか”で選ぶ。
タイトルとURLをコピーしました