1

数値の配列から要素を選択するためのより高い確率とベルカーブを扱ういくつかの投稿を読みましたが、選択したい文字列の配列があります。私のサイトには、6 色のセットからランダムに色を付けたい DIV がたくさんあります。

var colors = new Array('red', 'orange', 'yellow', 'green', 'blue', 'purple');

私が本当に赤い色が好きだとしましょう。次のコードを微調整して「ランダムな」要素を取得するにはどうすればよいですか? つまり、ほとんどの場合「赤」を返したいのです。

$('.box').each(function() {

  // Get a "random" color
  var randomColor = colors[Math.floor(Math.random()*colors.length)];

  $(this).css('background-color', randomColor);
});

配列に「赤」を何度も追加できることはわかっていますが、これを避けようとしています。それとも、まったく別のアプローチがありますか?ありがとう!

4

2 に答える 2

2

色でいっぱいの配列と同じ長さの別の配列を作成し、それらに確率を割り当てることができます (つまり、配列全体の合計が 1 になる必要があります)。ここから 1 と 0 の間の数値を生成し、確率の配列を反復処理してそれから減算します。0 になったら、そのインデックスを取得して、対応する色を返します。JavaScriptは苦手ですがやってみます。

var colors = new Array('red', 'orange', 'yellow', 'green', 'blue', 'purple');
var probabilities = new Array(0.5 , 0.1, 0.1, 0.1, 0.2);
var prob = Math.random()
var i=0;
for (i=0;i<probabilities.length && prob > 0;i++)
{
prob = prob - probabilities[i];
}
var color = colors[i];

私はそれがうまくいくと信じています。

于 2013-02-12T00:23:24.023 に答える
1

それに、赤がどれだけ好きかを言うのは難しいですが、考えられる方法の 1 つを次に示します。

var randomColor = colors[Math.random() > 0.5
    ? Math.floor(Math.random() * colors.length) : 0];

この場合、赤は他の色よりも 0.5 の確率で選択されます。

于 2013-02-12T00:20:02.947 に答える