1

我已经阅读了一些关于从数字数组中选择元素的更高概率和钟形曲线的帖子,但是我有一个我想从中选择的字符串数组。我的网站上有一堆 DIV,我想从一组 6 种颜色中随机着色:

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

此外,很难说你有多爱红色,但这里有一种可能的方式:

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

在这种情况下,红色将以 0.5 的概率被选中,而不是其他颜色。

于 2013-02-12T00:20:02.947 回答