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

JavaScriptで乱数を使って文字列を固定長までパディングする方法

文字列処理を行っていると、「短い文字列を指定した長さまで埋めて(パディングして)返したい」というケースに出会うことがあります。本記事では、乱数を使って文字列の末尾を埋め、指定された固定長に揃える関数をJavaScriptで実装する方法を解説します。

要件の整理

まず、実装すべき関数 padString() の仕様を確認しましょう。

  • 第1引数:パディング対象の文字列
  • 第2引数:目標となる長さ(数値)
  • 元の文字列の長さは、常に目標の長さ以下である
  • 文字列の末尾にランダムな数字を追加し、長さがちょうど目標値と一致するようにする
  • 最終的に新しい文字列を返す

実装コード

この問題は、再帰処理を使うと非常にシンプルに書くことができます。文字列の長さが目標に達していなければ、0〜9のランダムな数字を1つ生成して末尾に追加し、自分自身を再度呼び出します。

const padString = (str, len) => {
    if(str.length < len){
        const random = Math.floor(Math.random() * 10);
        return padString(str + random, len);
    };
    return str;
};
console.log(padString('abc', 10));
console.log(padString('QWERTY', 10));
console.log(padString('HELLO', 30));
console.log(padString('foo', 10));

実行結果

コンソールへの出力は以下のようになります。乱数を使用しているため、実行するたびに数字部分は変わります。

abc5189239
QWERTY2303
HELLO9332934005655101848049087
foo9039416

コードの解説

この関数の動作を順番に見ていきましょう。

  1. 長さのチェック: str.length < len が true の場合、まだ目標の長さに達していないためパディングを続けます。
  2. 乱数の生成: Math.random() は 0 以上 1 未満の小数を返すため、これに 10 を掛けて Math.floor() で切り捨てることで、0〜9 の整数を得られます。
  3. 再帰呼び出し: 生成した数字を文字列の末尾に連結し、再び padString() を呼び出します。条件を満たすまでこれを繰り返します。
  4. 完了時の返却: 文字列の長さが目標に達したら、その文字列をそのまま返します。

ループ版の代替実装

再帰ではなく、while ループを使って書くこともできます。深いネストを避けたい場合や、非常に大きな長差を扱う場合はこちらの方が安全です。

const padStringLoop = (str, len) => {
    let result = str;
    while(result.length < len){
        result += Math.floor(Math.random() * 10);
    }
    return result;
};

console.log(padStringLoop('abc', 10)); // 例: abc739102584

まとめ

Math.random() と再帰(またはループ)を組み合わせることで、文字列を目標の長さまでランダムな数字でパディングする関数を簡単に実装できました。IDの一時的なダミー生成やテストデータの作成など、さまざまな場面で応用できるテクニックです。

  1. JavaScriptで文字列内の最長の母音部分文字列の長さを求める方法

    問題 文字列を引数として受け取るJavaScriptの関数を作成する必要があります。この関数は、母音(a、e、i、o、u)のみで構成される連続した部分文字列の中から、最も長いものの長さを返さなければなりません。 アプローチ この問題は、文字列を先頭から順番に走査しながら、現在連続している母音の数をカウントすることで解決できます。具体的な手順は以下の通りです。 cur:現在連続している母音の数を記録するカウンター変数 max:これまでに見つかった最長の母音連鎖の長さを保持する変数 走査中の文字が母音であれば cur を1増やし、max より大きければ max を更新する 子音に遭遇した場合は

  2. C++を使ってランダムな英数字文字列を生成する方法

    この記事では、C++を使ってランダムな英数字文字列を生成する方法を解説します。対象となる文字は、小文字(a〜z)、大文字(A〜Z)、そして数字(0〜9)です。プログラムはこれらの文字の中からランダムに1文字ずつ選び、指定された長さのランダムな文字列を作成します。入力:生成する文字列の長さを指定出力:指定した長さのランダム文字列 例:「XSme6VAsvJ」アルゴリズムステップ1:大文字・小文字・数字をすべて格納する配列を定義するステップ2:ユーザーから文字列の長さ n を受け取るステップ3:n 回ランダムに文字を選択し、長さ n の文字列を生成するステップ4:終了サンプルコード以下のコードでは