web-dev-qa-db-ja.com

JavaScriptまたは他のプログラミング言語の配列からランダムに選択する簡単な方法はありますか?

私は、コーダーの入力(var answer)を配列からランダムに選択した文字列(answers)と比較するコードを含む初心者向けのJavaScriptブックを読んでいます。それは推測ゲームです。

文字列がランダムに選択される方法について混乱しています。コードは、Math.random関数にAnswers配列とその長さプロパティを乗算しているようです。チェックしてみると、これは配列からランダムに選択する標準的な方法のように見えますか?算術演算子*を使用して乗算するのはなぜですか?配列の長さに基づいてランダムな文字列を出力しますか?長さは技術的には3つのストリングだけではありませんか? index = answers.randomのような単純なものにすべきだと思います。それはJSまたは他の言語で存在しますか?

<script>

var guess = "red";
var answer = null;

var answers = [ "red",
"green",
"blue"];

var index = Math.floor(Math.random() * answers.length);

if (guess == answers[index]) {
answer = "Yes! I was thinking " + answers[index];
} else {
answer = "No. I was thinking " + answers[index];
}
alert(answer);

</script>
20
nicedwar

Pythonでは簡単です。

_>>> import random
>>> random.choice(['red','green','blue'])
'green'
_

あなたが見ているコードが非常に一般的である理由は、通常、統計で確率変数について話しているとき、それは[0,1)の範囲を持っているからです。必要に応じて、パーセントと考えてください。このパーセントをランダム要素の選択に適したものにするには、範囲を掛けて、新しい値が[0、RANGE)になるようにします。 Math.floor()は、数値が整数であることを確認します。これは、配列でインデックスとして使用する場合、小数は意味がないためです。

あなたはあなたのコードを使用してJavascriptで同様の関数を簡単に書くことができます、そしてそれを含むたくさんのJSユーティリティライブラリがあると私は確信しています。何かのようなもの

_function choose(choices) {
  var index = Math.floor(Math.random() * choices.length);
  return choices[index];
}
_

次に、choose(answers)と書くだけでランダムな色を取得できます。

32
Matt Luongo

Math.randomは0から1の間の乱数を与えます。

この値に配列の長さを掛けると、配列の長さよりも厳密に短い数になります。

thatMath.floorを呼び出すと、小数点が切り捨てられ、配列の範囲内で乱数が得られます

var arr = [1, 2, 3, 4, 5];
//array length = 5;

var Rand = Math.random();
//Rand = 0.78;
Rand *= arr.length; //(5)
//Rand = 3.9
Rand = Math.floor(Rand);
//Rand = 3

var arr = [1, 2, 3, 4, 5];
//array length = 5;

var Rand = Math.random();
//Rand = 0.9999;
Rand *= arr.length; //(5)
//Rand = 4.9995
Rand = Math.floor(Rand);
//Rand = 4 - safely within the bounds of your array
20
Adam Rackis

どうぞ

function randomChoice(arr) {
    return arr[Math.floor(arr.length * Math.random())];
}
15
scottmrogowski

人気のあるUnderscore javascriptライブラリは、このための関数を提供します。これは、pythonのrandom.choiceと同様に使用できます。

http://underscorejs.org/#sample

var random_sample = _.sample([1, 2, 3, 4, 5, 6]);
2
Mikael Lepistö
var choiceIndex = Math.floor(Math.random() * yourArray.length)
1
Freestyle076

Math.randomおよび同様の関数は通常、0〜1の数値を返します。したがって、乱数に可能な最大値Nを掛けると、0〜N

1
CanSpice

Pythonそれは...

import random

a=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'etc.']
print random.choice(a)
0
CoffeeRain