JavaScriptで数字根(デジタルルート)に基づいて配列をソートする方法
数字根(デジタルルート)とは
数字根(デジタルルート)とは、正の整数を構成するすべての桁の数字を合計した値のことです。たとえば「13」であれば 1 + 3 = 4 となり、数字根は 4 になります。
本記事では、整数の配列を受け取り、次のルールに従って並べ替えるJavaScript関数を作成します。
- 要素 a が b より先に来るのは、a の数字根が b の数字根以下である場合。
- 数字根が同じ場合は、通常の大小関係において小さい方の数値を先に配置する。
たとえば、4 と 13 はどちらも数字根が「4」で等しいですが、4 < 13 であるため、両方を含む配列では常に 4 が 13 より先に並ぶことになります。
入力例と期待される出力
入力配列が次の場合 −
const arr = [13, 20, 7, 4];
出力は次のようになります −
const output = [20, 4, 13, 7];
この結果になる理由を確認してみましょう。各数値の数字根は以下の通りです。
- 20 → 2 + 0 = 2
- 4 → 4
- 13 → 1 + 3 = 4
- 7 → 7
数字根の昇順に並べると「20(2)→ 4・13(4)→ 7(7)」となります。4 と 13 は数字根が同一のため、数値として小さい 4 が先に配置されます。
サンプルコード
const arr = [13, 20, 7, 4];
const digitSum = (num, sum = 0) => {
if(num){
return digitSum(Math.floor(num / 10), sum + (num % 10));
};
return sum;
};
const digitalSort = (arr = []) => {
const sorter = (a, b) => {
return (digitSum(a) - digitSum(b)) || (a - b);
};
arr.sort(sorter);
};
digitalSort(arr);
console.log(arr);コードの解説
- digitSum 関数: 再帰的に自分自身を呼び出すことで各桁の合計を計算します。
num % 10で最下位の桁を取り出して加算し、Math.floor(num / 10)でその桁を除去した残りの数値を次の引数に渡します。num が 0 になった時点で、累積した合計 sum を返します。 - digitalSort 関数: 配列の
sort()メソッドに比較関数 sorter を渡しています。(digitSum(a) - digitSum(b)) || (a - b)という式により、まず数字根同士を比較し、その差が 0(つまり数字根が同じ)の場合には||演算子の働きで後段の(a - b)、すなわち数値そのものの大小比較が行われます。
出力結果
このコードを実行すると、コンソールに次の出力が表示されます −
[ 20, 4, 13, 7 ]
-
JavaScriptで2の平方根(√2)を取得する方法
JavaScriptで2の平方根(√2)を取得するには、Mathオブジェクトが持つSQRT2プロパティを使用します。このプロパティは定数として定義されており、2の平方根である約 1.414 の値を返します。Math.SQRT2は読み取り専用の定数であり、自分で計算する必要がないため、コードの可読性と精度の両面でメリットがあります。サンプルコード以下のコードを実行すると、JavaScriptで2の平方根の値を取得して表示できます。<html> <head> <title>JavaScript
-
JavaScriptの数値(Number)の基本と実践サンプルコード
JavaScriptでは、整数も小数もすべて「Number」型として扱われます。この記事では、数値変数の定義方法と、それらを使った簡単な演算の例を、動作するHTMLサンプルコードとともに紹介します。サンプルコード以下は、JavaScriptで数値を扱う基本的な例です。整数(22、99)と小数(1.523)を変数に格納し、ボタンをクリックすると画面に表示する仕組みになっています。<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport co