JavaScript every と some の使い方 #1

株式会社リュディアです。JavaScript でサポートしている高階関数の1つである every メソッド(以下、reduce ) についてまとめてみます。今回は同時に some メソッド(以下、some )についてもまとめてみます。掲載するソースコードはすべて GAS の開発環境で動作確認をしています。

every, some とも他の高階関数と同様、対象となる元配列にコールバック関数で定義されている操作を行うのですが、一言で記載すると以下のようになります。

every : コールバック関数で定義された「特定の条件」を配列のすべての要素が満足する場合は true、そうでなければ false を返す
some : コールバック関数で定義された「特定の条件」を配列の要素のうち 1 つでも満足する場合は true、そうでなければ false を返す

では例を見ていきましょう。map や reduce のまとめと同様に、コールバック関数の引数を利用する、しないに関わらずすべてを記載しています。最初の例は同じ元配列に対して、every と some を適用した場合の例を並べて記載しています。every と some の例で不等号の向きを入れかえていることに注意してください。

function myFunctionEveryAndSome() {
 const inputArray = [ 1, 3, 10, 17, 20, 31 ] ;
 
 const returnOfEvery = inputArray.every( function( currentValue, index, array ) {
                                           return currentValue < 10 ;
                                         } ) ;

 const returnOfSome = inputArray.some( function( currentValue, index, array ) {
                                         return currentValue > 10 ;
                                       } ) ;

 console.log( returnOfEvery ) ;
 console.log( returnOfSome ) ;
}

// 実行結果
// false
// true

every の例では元配列のすべての要素が 10 未満かどうかを確認しているので戻り値は false です。 some の例では元配列の要素の中に 10 を超える数が 1 つでもあるかどうかを確認しているので戻り値は true です。

次に具体的に関数の動きを見ていきましょう。まずは every の例からです。以下の例と実行結果を見てください。

function myFunctionEvery() {
 const inputArray = [ 1, 3, 10, 17, 20, 31 ] ;
 
 const returnOfEvery = inputArray.every( function( currentValue, index, array ) {
                                           console.log( currentValue, index, array ) ;
                                           return currentValue < 10 ;
                                         } ) ;

 console.log( returnOfEvery ) ;
}

// 実行結果
// currentValue index array
//  1           0     [ 1, 3, 10, 17, 20, 31 ]
//  3           1     [ 1, 3, 10, 17, 20, 31 ]
// 10           2     [ 1, 3, 10, 17, 20, 31 ]
// false

元配列の先頭から順に 10 未満かどうかを確認しています。every はすべての要素が 「10未満」かどうかを確認しています。先頭から 1, 3 と進めている間は条件を満足していますが、インデクス 2 の要素 10 は「10未満」という条件を満足しません。every は条件を満足しない要素に出会うと動作をとめ false を返していることがわかります。つまり途中で条件を満足しない要素に出会うと処理をとめるということになります。

同様に some についても具体的な動きを見ていきましょう。以下の例と実行結果を見てください。

function myFunctionSome() {
 const inputArray = [ 1, 3, 10, 17, 20, 31 ] ;
 const returnOfSome = inputArray.some( function( currentValue, index, array ) {
                                         console.log( currentValue, index, array ) ;
                                         return currentValue > 10;
                                       } ) ;
                                         
 console.log( returnOfSome ) ;
}

// 実行結果
// currentValue index array
//
//  1           0     [ 1, 3, 10, 17, 20, 31 ]
//  3           1     [ 1, 3, 10, 17, 20, 31 ]
// 10           2     [ 1, 3, 10, 17, 20, 31 ]
// 17           3     [ 1, 3, 10, 17, 20, 31 ]
// true

元配列の先頭から順に 10 を超えるかどうかを確認しています。some は「10を超える」要素が 1 つでよいのであるかどうかを確認しています。先頭から 1, 3, 10 と進めている間は条件を満足しませんが、インデクス 3 の要素 17 は条件「10を超える」を満足します。some は条件を満足する要素に出会うと動作をとめ true を返していることがわかります。途中で条件を満足する要素に1つでも出会えば処理をとめるということになります。

高階関数 every と some  の動きは理解できたでしょうか。過去の map, reduce と比較すると簡単だったと思います。積極的に使ってみてください。

では、ごきげんよう。

この記事が気に入ったらサポートをしてみませんか?