JavaScriptで数値の各桁の位の値を求める方法
本記事では、正の整数を受け取り、その数の各桁の位の値(プレースバリュー)を配列として返す関数 splitNumber() をJavaScriptで実装する方法を解説します。
やりたいこと
たとえば、入力として次のような数値が与えられた場合:
const num = 1234;
期待される出力は以下のようになります。
出力例
const output = [1000, 200, 30, 4];
つまり、千の位・百の位・十の位・一の位それぞれの値を要素とした配列を作るわけです。それでは、実際にコードを書いていきましょう。
再帰を使ったアプローチ
この問題は、数値の各桁を先頭から順に処理していくため、再帰的なアプローチとの相性が非常に良いのが特徴です。
各桁の位の値を格納した配列を返す再帰関数は、次のように実装できます。
サンプルコード
const splitNumber = (num, arr = [], m = 1) => {
if(num){
return splitNumber(Math.floor(num / 10), [m * (num % 10)].concat(arr), m * 10);
}
return arr;
};
console.log(splitNumber(2346));
console.log(splitNumber(5664));
console.log(splitNumber(3453));
console.log(splitNumber(2));
console.log(splitNumber(657576));
console.log(splitNumber(345232));処理の流れを解説
この関数の仕組みは以下の通りです。
引数の意味:
num: 処理対象となる数値arr: 結果を蓄積する配列(初期値は空配列)m: 現在処理している桁の重み(1, 10, 100... と増えていく)
ロジック:
num % 10で最下位の桁(一の位)を取り出し、mを掛けることでその桁の位の値を計算します。Math.floor(num / 10)で最下位の桁を取り除いた数値を作り、再帰呼び出しを行います。- 新しく計算した位の値は配列の先頭に追加することで、最終的に上位の桁から並んだ配列になります。
numが0になった時点で再帰を終了し、蓄積した配列を返します。
実行結果
コンソールには以下のように出力されます。
[ 2000, 300, 40, 6 ] [ 5000, 600, 60, 4 ] [ 3000, 400, 50, 3 ] [ 2 ] [ 600000, 50000, 7000, 500, 70, 6 ] [ 300000, 40000, 5000, 200, 30, 2 ]
どの入力に対しても、各桁の位の値が正しく上位の桁から順に配列へ格納されていることが確認できます。1桁の数値の場合は、そのまま単一の要素を持つ配列が返されます。
-
JavaScriptで入力値が数字か文字かを判定する方法【isNaN()関数の使い方】
入力された値が数字か文字(数値以外)かを判定するには、JavaScriptのisNaN()関数を使用します。この関数は、値がNaN(Not a Number:非数)である場合にtrueを返します。この特性を利用することで、ユーザーが入力した値が数値かどうかを簡単にチェックできます。 isNaN()関数とは isNaN()は「is Not a Number」の略称です。引数として渡された値が数値として解釈できない場合にtrueを、数値として解釈できる場合はfalseを返します。これにより、「入力内容が数字かどうか」をシンプルに判定できるのが特徴です。 サンプルコード 以下のコードでは、フォームの
-
JavaScriptで数値が三角数かどうかを判定する方法
三角数(Triangular Number)とは? 三角数とは、点を正三角形の形に敷き詰めたときに現れる数のことです。n番目の三角数は「1からnまでの自然数の合計」として表され、次の公式で求められます。 Tn = n(n+1) / 2 具体的な三角数は 1, 3, 6, 10, 15, 21, 28 … と続きます。例えば 10 は、各辺に4個の点を配置した正三角形を構成できるため、三角数です。 問題 数値を引数として受け取り、その数値が三角数であれば true を、そうでなければ false を返すJavaScript関数を実装します。 判定の考え方 n(n+1)/2 = num となる正