今回はeveryです!
早速MDNを見ていきます。
every() は Array インスタンスのメソッドは、列内のすべての要素が指定された関数で実装されたテストに合格するかどうかをテストします。これは論理値を返します。
配列内の全ての値が条件を満たしていればtrueを返す、なるほど。
// 公式から引用
const isBelowThreshold = (currentValue) => currentValue < 40;
const array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold));
// true
const isBelowThreshold = (currentValue) => currentValue < 40;
const array1 = [1, 30, 39, 29, 10, 40, ]; // 40にしてみる
console.log(array1.every(isBelowThreshold));
// false
構文、引数
every(callbackFn)
every(callbackFn, thisArg)
callbackFn
よくみる3つを引数に持てますね。
element
配列内で処理中の現在の要素です。
index
配列内で処理中の現在の要素のインデックスです。
array
every() が呼び出された配列です。
thisArg
何をthisとして扱うかを指定できます。
解説
配列のそれぞれの要素に対して、指定された callbackFn 関数が偽値を返すまで一度ずつ呼び出します。 そのような要素が見つかった場合、 every() は直ちに false を返し、配列の反復処理を中止します。
直ちに false を返し
とあります。
someの時もそうでしたが、余計な処理をskipしてくれるのはいいですね。
every は数学における「∀ (すべての / for all)」記号と同様のふるまいをします。特に、空の配列に対しては true を返します。(空集合のすべての要素が与えられた任意の条件を満たすことは空虚に真です。)
空虚に真(Vacuous Truth)
なにそれ?ChatGPTに聞いてみました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F129861%2Fa170a344-5946-fea0-38e1-d4d2711b46d7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1bece0936b27403c0c5e4ee170edacb5)
∀でターンエーだと思っていたら、まさかのユニコーン出てきました。
条件を満たす対象が存在しない場合trueとする。と言うことですね。なるほど。
確認します↓
const isBelowThreshold = (currentValue) => currentValue < 40;
const array1 = [];
console.log(array1.every(isBelowThreshold));
// true
ほんとだ。trueです。
読み進めます。
callbackFn は値が代入されている配列の要素に対してのみ呼び出されます。疎配列の空のスロットに対しては呼び出されません。
ここもsome()と似ていますね。
確認します↓
const isBelowThreshold = (element , index) => {
console.log(element);
console.log(index);
console.log("-----------");
return element < 40;
}
const array1 = [,,,,,,,2];
console.log(array1.every(isBelowThreshold));
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F129861%2Ff71ff7f9-3591-9ceb-c63a-d9beaa064288.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dc7776bb06f62088544f541c792916d8)
確かに、index7番までskipしてくれています!
読み進めます。
callbackFn は、 every() の呼び出しを始めたときの配列の長さを超えて追加された要素にはアクセスしません。
既に処理したインデックスを変更しても、 callbackFn が再度呼び出されることはありません。
まだ処理していない既存の配列要素が callbackFn によって変更された場合、callbackFn に渡される値はその要素が取得された時点での値になります。削除された要素は処理されません。
ここもsome()で確認しました。
- everyを呼び出した時点の配列数しか処理しない
- 未来の値を変更したらその値が処理対象となる
- every中に配列の中身を増やしても、増えたものに関しては処理しない
ですね。なるほど!
今回はeveryを見ていきました!
someの全部一致バージョンとして理解しました。
引き続き、学習を続けていきましょう!!