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。 迷ったら“全件か、いずれかか”で選ぶ。
