我有一个数组,我需要做的是随机显示的概率低于输出时是我的代码
var shirts = [
["images/fantastic-logo.png","12.65"],
["images/fantastic-word.png","10.00"],
["images/free-product.png","15.50"]
];
var pos = Math.floor((Math.random() * shirts.length) + 0);
$("#image").html($("<img/>").attr("src", shirts[pos][0]));
$(".price").html("$" + shirts[pos][1]);
我有做基本的Math.random()以使其随机显示图像,现在我需要,使之出现的概率,例如概率为表示[“图像/奇妙-logo.png”,“12.65”]为50 %,[ “图像/奇妙-word.png”, “10.00”]为25%,[ “图像/游离product.png”, “15.50”]为25%。
感谢大家的帮助
一种选择是增加第三元件,其指示概率的重量。
在下面的例子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>
function getRandomInt(max) { return Math.floor(Math.random() * Math.floor(max)); } /* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random */ getRandomInt(3)
如果你得到0或1,第一图像被选择。 但这种方法是不优雅。 请参考下面的链接。
生成加权随机数
对于短数组这应该是足够的,使用getRandomInt
从Mozilla开发 :
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]);
请注意,您可以在雷的回答少用数等。 对于一个更大的数组你可以使用更好的方法 。