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

【JavaScript】指定範囲内でn個の乱数を生成し、最大値を取得する方法

本記事では、JavaScriptで「乱数の生成範囲」と「生成する個数」を受け取り、生成した乱数の中から最大値を返す関数の実装方法を解説します。

作成する関数の仕様は以下のとおりです。

  • 第1引数:2つの数値を含む配列。乱数を生成する範囲(最小値と最大値)を指定します。
  • 第2引数:単一の数値。生成する乱数の個数を指定します。
  • 戻り値:生成されたすべての乱数の中で最も大きい数値。

コード例

実際のコードは次のとおりです。

const range = [15, 26];
const count = 10;
const randomBetweenRange = ([min, max]) => {
    const random = Math.random() * (max - min) + min;
    return random;
};
const pickGreatestRandom = (range, count) => {
    const res = [];
    for(let i = 0; i < count; i++){
        const random = randomBetweenRange(range);
        res.push(random);
    };
    return Math.max(...res);
};
console.log(pickGreatestRandom(range, count));

実行結果

コンソールには以下のように出力されます(乱数のため、実行するたびに値は変わります)。

25.686387806628826

コードの解説

randomBetweenRange 関数

Math.random() は 0 以上 1 未満のランダムな小数を返します。これに (max - min) を掛けて min を加算することで、「min 以上 max 未満」の範囲の乱数を生成できます。

また、引数で配列の分割代入 [min, max] を使用することで、渡された範囲配列から最小値と最大値を簡潔に取り出せる点もポイントです。

pickGreatestRandom 関数

forループで第2引数に指定された回数だけ乱数を生成し、順番に配列へ格納していきます。すべての乱数が揃ったら、Math.max(...res) のようにスプレッド構文で配列を展開し、中身の最大値を一括して取得しています。

なお、よりモダンな書き方としては、ループ部分を Array.from() を使って次のように置き換えることも可能です。

const pickGreatestRandom = (range, count) =>
  Math.max(...Array.from({ length: count }, () => randomBetweenRange(range)));
  1. JavaScriptでスペース区切りの数値文字列から最大値と最小値を抽出する方法

    問題 今回実装するのは、スペースで区切られた複数の数値を含む文字列を引数として受け取るJavaScript関数です。関数は、文字列の中から最大の数値と最小の数値だけを抜き出し、それらをスペースで区切った1つの文字列として返す必要があります。 入力例: const str = 5 57 23 23 7 2 78 6; 出力例: const output = 78 2; これは、配列内の最大値が 78、最小値が 2 であるためです。 解決策:reduce() を使った実装 以下のコードでは、split() で文字列を配列に変換し、reduce() メソッドを使って1回の走査で最大値と最小値を同時

  2. JavaScriptで指定した範囲内の自然数の配列を生成して返す方法

    はじめにこの記事では、[a, b](a ≤ b)という形式の2つの数値からなる配列を受け取り、a から b までのすべての自然数(両端の値を含む)を要素とする配列を返す JavaScript 関数の実装方法を解説します。問題作成する関数は、範囲を指定する配列 [a, b](ただし a ≤ b)を引数として受け取り、その範囲に含まれるすべての自然数を配列として返す必要があります。境界値である a と b 自身も結果に含める点がポイントです。サンプルコード以下が基本的な実装例です。const range = [6, 45]; const naturalBetweenRange = ([lower,