分配;“输出频率”;到数组';s元素,使用javascript

分配;“输出频率”;到数组';s元素,使用javascript,javascript,arrays,Javascript,Arrays,我有这样一个数组: var arrA = [1lemon, 2lemons, 3lemons, 1orange, 2oranges, 3oranges, 1apple, 2apples, 3apples, 1banana, 2bananas, 3bananas, 1coconut, 2coconuts, 3coconuts]; …我正在使用此函数洗牌: function shuffle(array) { var currentIndex = array.le

我有这样一个数组:

var arrA = [1lemon, 2lemons, 3lemons, 1orange, 2oranges, 3oranges, 1apple, 2apples, 3apples, 1banana, 2bananas, 3bananas, 1coconut, 2coconuts, 3coconuts];
…我正在使用此函数洗牌:

        function shuffle(array) {
          var currentIndex = array.length, temporaryValue, randomIndex;

          // While there remain elements to shuffle...
          while (0 !== currentIndex) {

            // Pick a remaining element...
            randomIndex = Math.floor(Math.random() * currentIndex);
            currentIndex -= 1;

            // And swap it with the current element.
            temporaryValue = array[currentIndex];
            array[currentIndex] = array[randomIndex];
            array[randomIndex] = temporaryValue;
          }

          return array;
        }

arrA = shuffle(arrA);
…然后我有一些代码来输出随机数组的结果,一次一个,每4秒一个,如下所示:

var text = arrA;
var counter = 0;
var elem = document.getElementById("changeText");
setInterval(change, 4000);
function change() {
 elem.innerHTML = text[counter];
    counter++;
    if(counter >= text.length) { counter = 0; }
}
它们将出现在div上:

<div id="changeText"><p>pick fruit(s)</p></div>
采摘水果

但以这种方式,数组中的所有元素都将出现在每个循环上(它们有100%的出现可能性)

如何使它们以特定频率出现?

那么
1水果
在50%的时间内出现,
2水果
30%的时间出现,而
3水果
20%的时间出现

只是把我的心思放在这上面


谢谢你的想法,

我建议对概率和其余的随机数进行连续检查

该函数首先将返回值设置为最后一个可能的索引,并进行迭代,直到剩余的随机值小于实际概率

概率之和必须为1

函数getRandomIndexByProbability(概率){
var r=Math.random(),
指数=概率。长度-1;
概率。一些函数(概率,i){
if(r<概率){
指数=i;
返回true;
}
r-=概率;
});
收益指数;
}
函数(数字、单词){
返回编号===1?单词:单词+'s';
}
var i,
水果=[‘柠檬’、‘橘子’、‘苹果’、‘香蕉’、‘椰子’],
概率=[0.5,0.3,0.2],
计数={},
水果,
价值
forEach(函数(a){
var i;

for(i=1;我太棒了,谢谢!我必须深入研究代码才能完全理解它,但它看起来很精彩。