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

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

JavaScriptで配列からランダムな値を選択するには、Math.random()メソッドを活用します。Math.random()は0以上1未満の浮動小数点数を返すため、これに配列の長さを掛けてMath.floor()で整数化することで、ランダムなインデックスを生成できます。

以下の例では、Fisher-Yatesシャッフルアルゴリズムを使って配列全体をシャッフルした後、先頭から3つの要素を取り出すことで、重複のない複数のランダムな値を取得しています。

サンプルコード

var subjectNames = ["Javascript", "MySQL", "Java", "MongoDB", "Python", "Spring Framework"];
for(var index = subjectNames.length - 1; index > 0; index--){
    var rndIndex = Math.floor(Math.random() * (index + 1));
    var subjNameTemp = subjectNames[rndIndex];
    subjectNames[rndIndex] = subjectNames[index];
    subjectNames[index] = subjNameTemp;
}
var getRandomSubjectName = subjectNames.slice(0, 3);
console.log(getRandomSubjectName);

上記のプログラムを実行するには、ターミナルまたはコマンドプロンプトで以下のコマンドを実行します。

node fileName.js

ここでは、ファイル名を「demo178.js」として保存しています。

実行結果

プログラムを実行すると、以下のようにランダムに選ばれた3つの科目名が出力されます。実行するたびに結果は変わります。

PS C:\Users\Amit\javascript-code> node demo178.js
[ 'Javascript', 'MySQL', 'Python' ]

補足:単一のランダムな値を取得するシンプルな方法

配列から1つだけランダムな値を取得したい場合は、さらに簡潔に記述できます。

var subjectNames = ["Javascript", "MySQL", "Java", "MongoDB", "Python"];
var randomValue = subjectNames[Math.floor(Math.random() * subjectNames.length)];
console.log(randomValue);

この方法では、Math.random()に配列の長さを掛けた値の小数点以下を切り捨てることで、0から配列の長さマイナス1までの範囲のランダムなインデックスを生成し、対応する要素を取得します。用途に応じて、シャッフル方式とこのシンプルな方式を使い分けるのがおすすめです。

  1. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g

  2. JavaScriptのコンストラクターから値を返す方法

    JavaScriptのコンストラクターから値を返すには?JavaScriptでは、コンストラクター関数内で明示的にオブジェクトをreturnすると、new演算子によって生成されるインスタンス(this)の代わりに、そのオブジェクトが結果として返されます。この仕組みを利用すると、コンストラクターの戻り値を柔軟に制御できます。以下は、JavaScriptのコンストラクターから値を返すコード例です。サンプルコード<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-