JavaScript は配列からランダムな値を選択する

Ammar Ali 2023年10月12日
JavaScript は配列からランダムな値を選択する

このチュートリアルでは、JavaScript の Math.random() 関数を使用して配列からランダムな値を選択する方法について説明します。

JavaScript の Math.random() 関数を使用して、配列からランダムな値を選択する

JavaScript のインデックスを使用して、特定の配列から値を選択できます。特定の配列からランダムな値を選択するには、0 から配列の長さまでの範囲のランダムなインデックスを生成する必要があります。Math.random() 関数を使用してランダム値を生成できます。このランダム値の範囲を設定するには、length 関数を使用して取得できる配列の長さを乗算する必要があります。

Math.random() 関数から生成されたランダム値は浮動小数点値です。浮動小数点値を整数に変換するには、Math.floor() 関数を使用する必要があります。Math.floor() 関数は、浮動小数点数を指定された数よりも小さい整数に変換します。たとえば、5つの値の配列を作成し、そこからランダムな値を 1つ選択して、コンソールに表示してみましょう。以下のコードを参照してください。

var myArray = ['one', 'two', 'three', 'four', 'five'];
var rand = Math.floor(Math.random() * myArray.length);
var rValue = myArray[rand];
console.log(rValue)

出力:

two

上記のコードでは、ランダムインデックスは変数 rand に格納され、このインデックスを使用して、変数 rValue に格納される配列からランダム値を選択できます。ビット単位の NOT 演算子~~またはビット単位の OR 演算子|を使用することもできます。Math.floor() 関数の代わりに、浮動小数点数を整数に変換します。ビット単位の演算子を使用する方が高速ですが、数百万の値を含む配列では機能しない場合があります。たとえば、ビット単位の NOT 演算子を使用して乱数を生成してみましょう。以下のコードを参照してください。

var myArray = ['one', 'two', 'three', 'four', 'five'];
var rand = ~~(Math.random() * myArray.length);
var rValue = myArray[rand];
console.log(rValue)

出力:

one

それでは、ビット単位の OR 演算子を使用して乱数を生成しましょう。以下のコードを参照してください。

var myArray = ['one', 'two', 'three', 'four', 'five'];
var rand = Math.random() * myArray.length | 0;
var rValue = myArray[rand];
console.log(rValue)

出力:

three

コードを再度実行すると、出力が変わります。また、すべてのコードを書き直す必要がないように、特定の配列からランダムな値を選択する関数を作成することもできます。たとえば、特定の配列からランダムな値を選択し、それを配列でテストする関数を作成しましょう。以下のコードを参照してください。

function RandArray(array) {
  var rand = Math.random() * array.length | 0;
  var rValue = array[rand];
  return rValue;
}
var myArray = ['one', 'two', 'three', 'four', 'five', 'six'];
var rValue = RandArray(myArray);
console.log(rValue)

出力:

six

コードを再度実行すると、出力が変わります。これで、配列からランダムな値を選択するには、RandArray() 関数を呼び出すだけで済みます。

著者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

関連記事 - JavaScript Array