【JavaScript】 偶数奇数を判定する
更新日:2021/05/10
JavaScriptで偶数奇数判定をおこなおうとしたら、組み込み関数が存在していませんでした。
そこで独自に偶数奇数判定をおこなう関数を作成してみます。
偶数か奇数かを判定する関数
数値を2で割り余りが0なら偶数、1なら奇数になります。
この特徴から判定関数を作成してみます。
偶数かどうか判定する関数
数値が偶数かどうかを判定するisEven関数です。
偶数ならtrue、奇数や数値以外の値はfalseが返ります。
isEven関数
const isEven = num =>
(typeof num === "number" || num instanceof Number )
&& num % 2 === 0;
使用例とテスト結果
for (let i = 0 ; i < 12 ; i ++)
console.log( i + ":" + isEven( i ) );
0:true
1:false
2:true
3:false
4:true
5:false
6:true
7:false
8:true
9:false
10:true
11:false
関連記事:
■【JavaScript】 商と剰余(割り算の余り)を求める方法
奇数かどうか判定する関数
数値が偶数かどうかを判定するisOdd関数です。
奇数ならtrue、偶数や数値以外の値はfalseが返ります。
isOdd関数
const isOdd = num =>
(typeof num === "number" || num instanceof Number ) &&
num % 2 === 1;
使用例とテスト結果
for (let i = 0 ; i < 12 ; i ++)
console.log( i + ":" + isOdd( i ) );
0:false
1:true
2:false
3:true
4:false
5:true
6:false
7:true
8:false
9:true
10:false
11:true
数値文字列にも対応させる
ブラウザでユーザーが入力した文字列や、Ajaxなどでサーバーから取得した文字列に対して偶数奇数判定したいケースがあります。
基本的には、偶数奇数判定するまえに数値判定をするべきですが、ここでは同時に判定をおこないます。
偶数奇数判定・数値文字列対応
const isEven = num =>
(typeof num === "number" || num instanceof Number
|| ( (typeof num === "string" || num instanceof String) && !isNaN(num)) )
&& num % 2 === 0;
const isOdd = num =>
(typeof num === "number" || num instanceof Number
|| ( (typeof num === "string" || num instanceof String) && !isNaN(num)) )
&& num % 2 === 1;
余りの計算は、文字列にも適用されます。
そのため各関数とも、値が文字列かどうかと、値が数値と判定されるかどうかのチェックを追加して、問題なければそのまま余り判定をおこなっています。
配列から偶数または奇数インデックスを抜き出す
偶数奇数判定の応用例として、配列の偶数インデックスを抜き出し、新しく配列を作成してみます。
偶数インデックスのみ抜き出す関数
const oddArray = array => array.filter( ( e , index ) => isOdd( index) );
Arrayオブジェクトのfilterメソッドは、条件に一致する要素で新しく配列を作成します。
filterメソッドのコールバック関数は2番目の引数でインデックスを受け取るので、そのインデックスに対して偶数判定をおこないます。
使用例とテスト結果
const array = [ { val : 99 } , { val : 100 } , { val : 101 } , { val : 102 } , { val : 103 } ];
console.log( oddArray( array ) );
Array [
0: Object { val: 100 }
1: Object { val: 102 }
length: 2
]
更新日:2021/05/10
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。