JavaScript的获取概率针对阵列随机结果(Javascript Get Random resu

2019-09-29 09:12发布

我有一个数组,我需要做的是随机显示的概率低于输出时是我的代码

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%。

感谢大家的帮助

Answer 1:

一种选择是增加第三元件,其指示概率的重量。

在下面的例子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> 



Answer 2:

 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,第一图像被选择。 但这种方法是不优雅。 请参考下面的链接。

生成加权随机数



Answer 3:

对于短数组这应该是足够的,使用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]);

请注意,您可以在雷的回答少用数等。 对于一个更大的数组你可以使用更好的方法 。



文章来源: Javascript Get Random result with probability for specific array