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

JavaScriptで各単語に含まれる数字をもとに文字列を並べ替える方法

問題

文を表す文字列を引数として受け取り、その内容を並べ替えた結果を返すJavaScript関数を作成する必要があります。

文中の各単語には必ず1つの整数が含まれています。この関数では、最も小さい数値を持つ単語を先頭に置き、残りの単語も数値の昇順に並ぶように文字列全体を並べ替えます。

コード例

以下が実際の実装コードです。

const str = "is2 Thi1s T4est 3a";
const sortByNumber = (str = '') => {
    const findNumber = (s = '') => s
        .split('')
        .reduce((acc, val) => +val ? +val : acc, 0);
    const arr = str.split(' ');
    const sorter = (a, b) => {
        return findNumber(a) - findNumber(b);
    };
    arr.sort(sorter);
    return arr.join(' ');
};
console.log(sortByNumber(str));

出力結果

Thi1s is2 3a T4est

コードの解説

処理の流れを順番に確認していきましょう。

  • findNumber関数: 文字列を1文字ずつに分解し、reduceメソッドを使って最初に出現した数字を抽出します。数字以外の文字は無視され、数値が存在しない場合は0が返ります。
  • str.split(' '): 入力された文をスペースで区切ることで、単語ごとの配列を生成します。
  • sorter関数: 2つの単語それぞれから抽出した数値の差を返すことで、Array.prototype.sort()による昇順ソートを実現しています。
  • arr.join(' '): 並べ替え済みの単語を再びスペースで連結し、最終的な結果の文字列を組み立てます。

このように、「各単語から数値を抽出する処理」と「比較用のソート関数」を組み合わせることで、シンプルかつ効率的に目的の並べ替えを実現できます。入力データの形式が保証されている場合は、正規表現(match(/\d+/))を使って数値を抽出する方法もありますので、用途に応じて使い分けるとよいでしょう。

  1. JavaScriptで文字列の各文字を1始まりのインデックス回数だけ繰り返す方法

    問題 英小文字(a〜z)のみで構成された文字列を受け取り、特定のルールに従って新しい文字列を構築するJavaScript関数を作成する必要があります。 ルールは以下のとおりです。 各文字を、その文字列内での1始まりのインデックスの回数だけ繰り返す 繰り返し後の文字列の先頭の文字を大文字にする 異なる文字のグループ同士はダッシュ「-」で区切る たとえば、文字列「abcd」の場合、出力は次のようになります。 A-Bb-Ccc-Dddd コード例 以下は、forループを使った基本的な実装例です。 const str = abcd; const repeatStrings = (str) =&

  2. 【JavaScript】奇数はそのまま、偶数のバイナリ文字列だけを昇順に並べ替える方法

    問題 空白文字で区切られた、長さ3のバイナリ(2進数)文字列を含む文字列を受け取り、処理するJavaScript関数を作成します。 要件はシンプルながら少し変わっています。数値を昇順に並べ替えるのはよいものの、並べ替えてよいのは偶数だけで、奇数はすべて元の位置にそのまま残す必要があります。 コード例 以下が実際のコードです − const str = 101 111 100 001 010; const sortEvenIncreasing = (str = ) => {     const sorter = (a, b) => { &nb