JavaScriptで数値の桁を並べ替えて最大値を作る方法
この記事では、与えられた整数の各桁を並べ替えて、表現できる最大の数を求めるJavaScript関数の実装方法を解説します。
問題
数値 n を引数として受け取るJavaScript関数を用意します。この関数は、n の各桁を自由に入れ替えることで作れる最大の値を返す必要があります。
たとえば「124」という数値の場合、各桁(1・2・4)を大きい順に並べ替えることで、最大値である「421」が得られます。
アプローチ:大きい桁を左に置く
最大の数を作るための基本戦略はシンプルで、「大きな数字ほど上位の桁(左側)に配置する」ことです。これを実現するために、次の手順で処理を行います。
- 数値を文字列に変換し、1桁ずつに分解する
- 各桁を数値型に変換した配列を作る
- 配列を降順(大きい順)にソートする
- ソート済みの配列を連結して文字列に戻し、最後に数値へ変換して返す
実装コード
const num = 124;
const rotateToMax = n => {
// 数値を文字列に変換し、1桁ずつの数値の配列にする
const digits = String(n)
.split('')
.map(Number);
// 桁を降順(大きい順)にソート
digits.sort((a, b) => b - a);
// 結合して数値に戻して返す
return Number(digits.join(''));
};
console.log(rotateToMax(num)); // 421コードのポイント解説
String(n) で数値を文字列に変換し、split('') によって1文字ずつの配列に分解します。続く map(Number) で各要素を数値型に変換している点が重要です。これにより、後のソート処理で数値として正しく比較できるようになります。
配列の並べ替えには sort((a, b) => b - a) という比較関数を使用しています。Array.prototype.sort() は比較関数を指定しない場合、要素を文字列として辞書順に並べてしまうため、「b - a」という差分を返す比較関数を渡して、確実に降順ソートを行うようにしています。
最後に join('') で配列を連結して文字列に戻し、Number() で数値型へ変換して返します。これにより、戻り値も元の入力と同じ「数値」として扱えます。
実行結果
421
ほかの例を見てみましょう。「9123」を渡せば各桁を降順に並べ替えた「9321」が、「100」を渡せば「100」が返されます。
なお、この実装は正の整数を前提としています。負の数や小数を渡した場合は意図しない結果になるため、必要に応じて事前に入力チェックを追加すると安全です。
-
JavaScriptで数値の桁数(長さ)を取得する方法を解説
JavaScriptで数値の長さ(桁数)を取得したい場合は、toString()メソッドを使って数値を文字列に変換し、その後にlengthプロパティを参照します。JavaScriptでは、数値型(Number)のままではlengthを取得できません。lengthは文字列や配列に対して使えるプロパティのため、一度文字列へ変換する必要がある点に注意しましょう。基本的な書き方const num = 344; const length = num.toString().length; console.log(length); // 3サンプルコード以下のコードを実行すると、数値の長さを取得する方法を確
-
JavaScriptでフォームをリセット・クリアする方法|reset()メソッドの使い方を解説
JavaScriptを使ってフォームをリセットまたはクリアしたい場合は、reset()メソッドを使用します。このメソッドは、フォームに用意された「リセットボタン」をクリックしたときとまったく同じように動作し、フォーム内のすべての入力要素(テキストボックス、パスワード欄、チェックボックス、ラジオボタンなど)の値を初期状態に戻します。reset()メソッドの基本reset()メソッドは、対象のform要素に対して呼び出すだけで使えます。なお、リセットとは「空にする」ことではなく、HTMLのvalue属性などで指定された初期値(デフォルト値)に戻すという点に注意してください。初期値が設定されていない