JavaScriptで値が「すべて同じ」「2つ以上異なる」はeveryを使用する

everyメソッドとは

everyメソッドは与えられた関数によって実行されるテストに配列のすべての要素が通る場合はtrueを返す。

例えば配列内の数値がすべて10以上か調べるときは以下のようになる。

const arr = [1, 30, 39, 29, 10, 13];
console.log(arr.every(v => v >= 10));
// => false

everyで値がすべて同じか判定

everyで3つ以上の配列の値がすべて同じか判定するには以下のように最初の値が他と等しいかどうかを判定するだけで可能だ。

もしeveryを使用しなければコードが無駄に長く、処理が遅いものになってしまう。

const arr = [7, 7, 7]
if (arr.every(v => v === arr[0])) {
  console.log('すべて同じ値です。')
}

everyで値がすべて異なるか判定

everyで値がすべて異なるか判定するにはarr.every((v, i, self) でself(配列)にv(値)が含まれるかindexOfを使用して調べる。self.indexOf(v) === iがeveryでtrueなら値がすべて異なることになる。(2つ以上の重複があれば成立しないため)

const arr = [1, 2, 3]
if (arr.every((v, i, self) => self.indexOf(v) === i)) {
  console.log('すべて異なる値です。')
}

「すべて同じ」「すべて異なる」の条件に一致しない場合は2つ以上異なることになるので上記2つをif, else ifで書いて最後にelseの条件になったものが「2つ以上異なる」ことになる。

以上の条件分岐を簡単に確認できるサンプルを作成したので実際に値を変更して確認すると理解しやすいだろう。

「すべて同じ」「2つ以上異なる」値をeveryで判定したサンプル