JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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)を組み合わせることで、数値の桁を並べ替える処理をシンプルに実装できます。この手法は、桁の並べ替えだけでなく、降順ソートや特定の条件に基づく桁の操作など、さまざまな応用にも活用できます。

  1. JavaScriptで配列内の最小値の桁和が偶数かどうかを判定する方法

    本記事では、数値の配列を唯一の引数として受け取るJavaScript関数の実装方法を解説します。この関数は、まず配列の中から最小の数値を選び出し、その数値を構成するすべての桁の合計(桁和)を計算します。そして、その桁和が偶数であれば true を、奇数であれば false を返すという仕様です。動作の例たとえば、次のような入力配列が与えられた場合を考えてみましょう。const arr = [12, 657, 23, 56, 34, 678, 42];この場合の出力は次のようになります。const output = false;理由はシンプルです。配列内の最小値は 12 であり、その桁和は 1

  2. 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