解説
空の配列なのにeveryがtrue?someとの違いと「1件以上」の条件を分けよう
全要素が条件を満たすeveryと、1件でも満たすsome。空配列のtrue・falseを確認し、存在確認と内容の判定を分けて書く。

チェック済みの一覧をeveryで調べたら、一覧が空なのにtrueになった。everyは「1件以上ある」ことまで確認する関数ではないよ。要素が存在する条件と、要素の内容の条件を分けよう。
今回は真偽値だけの三つの配列で、everyとsomeを比べる。記事下の作例はブラウザだけで動き、送信や保存はしないよ。
全要素を確かめるeveryと、どれかを探すsome
const flags = [true, false];
console.log(flags.every(value => value === true)); // false
console.log(flags.some(value => value === true)); // true
everyは、すべての要素が条件を満たすかを見る。someは、一つでも条件を満たす要素があるかを見る。今回はvalue === trueという条件を使い、文字列などが混ざった場合を同じ真偽値だと扱わない例にしている。
処理をどこまで進めるかも違う。everyは条件を満たさない要素が見つかれば、someは満たす要素が見つかれば結果が決まる。毎回すべての要素へコールバックが呼ばれる前提にしないようにしよう。
空配列ではtrueとfalseに分かれる
const flags = [];
console.log(flags.every(value => value === true)); // true
console.log(flags.some(value => value === true)); // false
空配列には条件を満たさない要素がないため、everyはtrueになる。一方、条件を満たす要素も見つからないのでsomeはfalseになる。
この結果は、通信が成功してデータを全部取得できたことや、必須項目が一つ以上入力されていることを示すものではないよ。
1件以上かつ全件OKなら、二つの条件を書く
const flags = [];
const ready = flags.length > 0 && flags.every(value => value === true);
console.log(ready); // false
length > 0で存在を確認し、そのうえで全件の条件を調べる。「全件OKなら送信できる」などの仕様でも、空の場合をどう扱うかを先に決めよう。
作例では[true,true]、[true,false]、[]を選ぶと、件数、every、some、このreadyの四つが切り替わる。同じtrueでも、何の条件の結果かを見比べられるよ。
作例で期待する結果
| 配列 | every | some | 1件以上かつevery |
|---|---|---|---|
| [true,true] | true | true | true |
| [true,false] | false | true | false |
| [] | true | false | false |
選択を変えて結果を見たら、「最初から試す」で最初の配列へ戻そう。今回は穴のない配列だけを使っている。疎な配列の空きスロットや、オブジェクトの条件まで一緒に検証した例ではないよ。
編集部ではNode.jsとChromiumで三つの配列とリセットを確認した。条件に合う要素を取り出す場合はfindとfilter、代替値を選ぶ場合は||と??も参考になるよ。
動かしてみよう:全件・一件でも・空配列
三つの配列を選び、every・someと存在確認の結果を見よう。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。