JavaScript获得随机结果,特定数组的概率
2018-03-08
4037
我有一个数组,我需要按下随机显示输出以下是我的代码
511593604
我有基本的Math.random()它随机显示图像,现在我需要以概率显示出来,例如显示[“ Images/fancely-logo.png”,“ 12.65”]的概率为50%,[images/facneration-word.png'' ,“ 10.00”]为25%,[“图像/freeproduct.png”,“ 15.50”]为25%。
谢谢大家的帮助
3个回答
一种选择是添加第三个元素来表示概率的权重。
在下面的例子中,
fantastic-logo.png
有 2 个元素代表 50%,另外 2 个元素只有 1 个,每个元素代表 25%。
然后创建一个 4 元素数组
[0,0,1,2]
- 这表示元素 0 有 50% 的机会。元素 1 有 25% 的机会,元素 2 也有 25%。
从新创建的数组中随机选取一个值作为位置。
例如:
var shirts = [
["images/fantastic-logo.png", "12.65", 2],
["images/fantastic-word.png", "10.00", 1],
["images/free-product.png", "15.50", 1]
];
//Create a 4 element array based on probability weight
var probability = shirts.map((v, i) => Array(v[2]).fill(i)).reduce((c, v) => c.concat(v), []);
//Random select from probability array
var pos = probability[Math.floor((Math.random() * probability.length))];
$("#image").html($("<img/>").attr("src", shirts[pos][0]));
$(".price").html("$" + shirts[pos][1]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="image"></div>
<div class="price"></div>
Eddie
2018-03-08
Ray
2018-03-08
对于短数组,这应该足够了,使用
Mozilla 开发人员
中的
getRandomInt
:
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
var shirts = [
["images/fantastic-logo.png", "12.65"],
["images/fantastic-word.png", "10.00"],
["images/free-product.png", "15.50"]
];
var random = getRandomInt(100);
var selectedShirt;
if (random <= 50) {
selectedShirt = shirts[0];
} else if (random > 50 && random < 75) {
selectedShirt = shirts[1];
} else {
selectedShirt = shirts[2];
}
$("#image").html($("<img/>").attr("src", shirts[selectedShirt][0]));
$(".price").html("$" + shirts[selectedShirt][1]);
请注意,您可以像 Ray 的答案中那样使用较少的数字。对于更大的数组,您可以使用 更好的方法 。
Diogo
2018-03-08