分配;“输出频率”;到数组';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;我太棒了,谢谢!我必须深入研究代码才能完全理解它,但它看起来很精彩。