【JavaScript】 3や5などの倍数を抜き出して表示する
更新日:2022/07/08
特定範囲から倍数を抜き出す
ある値をある値で割って、余りが0なら倍数です。
余りは %演算子で求めることができます。
JavaScriptの場合は、次のようなコードで関数化できます。
範囲内の倍数取得例
const extractMultiplesRange = (from,to,multiple)=>{
const result = [];
for( let i = from ; i <= to ; i ++ ){
if( i % multiple === 0 ) result.push( i );
}
return result;
};
指定された範囲を1ずつカウントアップして、余りを確認しているだけです。
戻り値は、倍数がセットされた配列です。
3または5の倍数を求めるときは、次のように使用します。
const multiple3 = extractMultiplesRange( 1, 100 , 3 );
console.log( multiple3 );
// 結果:[ 3, 6, 9, 12, 15, 18, 21, 24, 27,
// 30, 33, 36, 39, 42, 45, 48, 51, 54,
// 57, 60, 63, 66, 69, 72, 75, 78, 81,
// 84, 87, 90, 93, 96, 99]
const multiple5 = extractMultiplesRange( 1, 100 , 5 );
console.log( multiple5 );
// 結果:[ 5, 10, 15, 20, 25, 30, 35,
// 40, 45, 50, 55, 60, 65, 70,
// 75, 80, 85, 90, 95, 100]
特定範囲から複数の値の倍数を抜き出す
上の例は3と5の倍数を求めるために関数を2回実行しています。
そこで、同じ範囲から複数の値の倍数を求めるように改良して、一回で済むようにしてみます。
範囲内の複数倍数取得例
const extractMultiplesRange2 = (from,to,multipleArray)=>{
if( !Array.isArray( multipleArray ) )
return extractMultiplesRange(from,to,multipleArray);
// 求める倍数をプロパティ名とするオブジェクト生成
const result = multipleArray.reduce((a,b)=>{a[b]=[];return a;},{});
for( let i = from ; i <= to ; i ++ ){
const count = multipleArray.forEach( e=>{
if( i % e === 0 ) result[e].push( i );
});
}
return result;
};
3番目の引数を配列に変更しています。
受け取った値が入れるかどうか確認して、配列でなかったら最初の例に丸投げしています。
次に、3番目の引数配列の値をプロパティ名としたオブジェクトを作成します。
指定された範囲を1ずつカウントアップするのは、最初の例と同じです。
異なるのは、対象となる値を一つずつ確認して、余りがゼロなら作成したオブジェクトのプロパティに格納している点です。
最後に、作成したオブジェクトを返しています。
この関数は、次のように使用します。
const multiple35 = extractMultiplesRange2( 1, 100 , [ 3 , 5 ] );
console.log( multiple35 );
// 結果:{
// "3" : [ 3, 6, 9, 12, 15, 18, 21, 24, 27,
// 30, 33, 36, 39, 42, 45, 48, 51, 54,
// 57, 60, 63, 66, 69, 72, 75, 78, 81,
// 84, 87, 90, 93, 96, 99],
// "5" : [ 5, 10, 15, 20, 25, 30, 35,
// 40, 45, 50, 55, 60, 65, 70,
// 75, 80, 85, 90, 95, 100]
// }
同時に公倍数を取得する
ついでに、公倍数も取得してみます。
同時に公倍数を取得する例
const extractMultiplesRange3 = (from,to,multipleArray)=>{
if( !Array.isArray( multipleArray ) )
return extractMultiplesRange(from,to,multipleArray);
// 求める倍数をプロパティ名とするオブジェクト生成
const result = multipleArray.reduce((a,b)=>{a[b]=[];return a;},{});
result["公倍数"]=[];
for( let i = from ; i <= to ; i ++ ){
const count = multipleArray.reduce( (a,b)=>{
if( i % b === 0 ) {
result[b].push( i );
a++;
}
return a;
},0);
if( count === multipleArray.length ) result["公倍数"].push( i );
}
return result;
};
最小公倍数を求めて余りを確認する方法もありますが、ここでは単純に公倍数の判定をカウントして確認しています。
カウントするために、forEachではなくてreduceを使っています。
letで変数を定義しなくて済むので、僕はreduceを使いまくってます。
実行結果は次のようになります。
const multiple35c = extractMultiplesRange3( 1, 100 , [ 3 , 5 ] );
console.log( multiple35c );
// 結果:{
// "3" : [ 3, 6, 9, 12, 15, 18, 21, 24, 27,
// 30, 33, 36, 39, 42, 45, 48, 51, 54,
// 57, 60, 63, 66, 69, 72, 75, 78, 81,
// 84, 87, 90, 93, 96, 99],
// "5" : [ 5, 10, 15, 20, 25, 30, 35,
// 40, 45, 50, 55, 60, 65, 70,
// 75, 80, 85, 90, 95, 100],
// '公倍数': [ 15, 30, 45, 60, 75, 90 ]
// }
更新日:2022/07/08
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。