JavaScriptで配列内のすべての数値の桁を昇順に並べ替える方法
問題の概要
数値の配列を受け取り、配列内のすべての数値の桁を特定の順序(この記事では昇順とします)で並べ替えるJavaScript関数を作成します。各数値は内部的に桁を入れ替えるだけで、配列の要素の順序自体は変えません。
例
たとえば、次のような配列が与えられた場合を考えてみましょう。
const arr = [543, 65, 343, 75, 567, 878, 87];
この場合、期待される出力は次のとおりです。
const output = [345, 56, 334, 57, 567, 788, 78];
出力結果を見ると、各数値の桁が昇順に並べ替えられていることがわかります。たとえば「543」は「345」に、「65」は「56」に、「343」は「334」に変換されています。また、すでに桁が昇順になっている「567」はそのままの値になっています。
コード例
以下がその実装コードです。
const arr = [543, 65, 343, 75, 567, 878, 87];
const ascendNumber = num => {
const numArr = String(num).split('').map(el => +el);
numArr.sort((a, b) => a - b);
return numArr.join('');
};
const sortDigits = arr => {
const res = [];
for(let i = 0; i < arr.length; i++){
res.push(ascendNumber(arr[i]));
};
return res;
};
console.log(sortDigits(arr));コードの解説
このコードの中核となるのは ascendNumber 関数です。以下の手順で動作します。
- String(num) で数値を文字列に変換し、split('') で1桁ずつの配列に分割します。
- map(el => +el) で各要素を数値型に変換します。これにより正確な数値比較が可能になります。
- sort((a, b) => a - b) で桁を昇順にソートします。
- join('') でソート済みの桁を再び文字列として結合して返します。
一方、sortDigits 関数は、元の配列の各要素に対して ascendNumber を適用し、結果を新しい配列に格納して返します。元の配列は変更されないため、安全に処理できます。
出力
コンソールには次のように出力されます。
[ '345', '56', '334', '57', '567', '788', '78' ]
なお、この実装では結果が文字列として返されます。数値型が必要な場合は、return numArr.join('') を return +numArr.join('') に変更するか、最終的な配列に対して map(Number) を適用することで対応できます。
まとめ
文字列変換と配列メソッド(split、map、sort、join)を組み合わせることで、数値の桁を並べ替える処理をシンプルに実装できます。この手法は、桁の並べ替えだけでなく、降順ソートや特定の条件に基づく桁の操作など、さまざまな応用にも活用できます。
-
JavaScriptで配列内の最小値の桁和が偶数かどうかを判定する方法
本記事では、数値の配列を唯一の引数として受け取るJavaScript関数の実装方法を解説します。この関数は、まず配列の中から最小の数値を選び出し、その数値を構成するすべての桁の合計(桁和)を計算します。そして、その桁和が偶数であれば true を、奇数であれば false を返すという仕様です。動作の例たとえば、次のような入力配列が与えられた場合を考えてみましょう。const arr = [12, 657, 23, 56, 34, 678, 42];この場合の出力は次のようになります。const output = false;理由はシンプルです。配列内の最小値は 12 であり、その桁和は 1
-
JavaScriptで数値を反転して桁ごとの配列に分割する方法
問題概要数値を1つ受け取るJavaScriptの関数を作成する必要があります。この関数は、まず受け取った数値を反転させ、その反転した数値を1桁ずつに分割して、その配列を返すものとします。入力const num = 1234567;出力const output = [7, 6, 5, 4, 3, 2, 1];これは、反転後の数値が7654321になるためです。実装例以下がそのコードです。const num = 1234567; const reverseAndSplit = (num = 1) => { const numStr = String(num); &n