我想用自定义宽度随机化我的列表。为此,我编写了简单的JavaScript代码段,在1 and 2
之间生成数字。
功能如下:
randomizePortfolio: function() {
$('ul.works').children('li').each(function() {
var Random = Math.floor(Math.random() * 2) + 1,
words = 'normal';
if(Random == '2') {
words = 'wide';
}
$(this).addClass('col-md-'+3*Random+' col-sm-'+3*Random+' '+words);
});
$('ul.works').masonry({
itemSelector: 'li'
});
}
问题是,我希望1
的比例更高。现在它 - 显而易见 - 随机,所以有时我得到所有2
,其他时间 - 所有1
。如何为此添加比率(比方说3:1)?
答案 0 :(得分:3)
要获得3:1分布,您可以创建一个包含所需数字的数组,并添加三个1和一个2,并随机化索引:
var rvalues = [1,1,1,2];
var Random = rvalues[Math.floor(Math.random() * rvalues.length)];
这是另一种等效的方法,基于3/4的随机值小于3/4的事实:
var Random:
if (Math.random() < .75) Random = 1;
else Random = 2;
答案 1 :(得分:0)
另一种方式,我正在使用,可以为你做到:
// here's the value we wanna get by ratio (where v is value and r is ratio)
// r is an array with min and max value, this example is based on a 100% ratio
const ratioValues = [
{v: 1, r: [0,75]}, // 75% chance to get 1
{v: 2, r: [76,100]} // 25% chance to get 2
];
//actual function to get our value
function getRandByRatio(ratioValues) {
// idx is a random integer between 0 and 100
let idx = Math.floor(Math.random() * (100 + 1));
for (let item of ratioValues) {
// test if idx is within the r range
if (idx >= item.r[0] && idx <= item.r[1]) {
//if it is return our value
return item.v;
}
}
};
// let's make a testing function
function makeTest(nb) {
const ul = document.getElementById("rand-value");
for (let i = 0; i < nb; i++) {
ul.innerHTML += "<li>" + getRandByRatio(ratioValues) + "</li>";
}
};
makeTest(10);
&#13;
<ul id="rand-value"></ul>
&#13;
虽然只有2个值的代码可能相当多,但我觉得它更易读,更容易维护。(当你有更多的价值时,它会很棒!!!)
希望这对某人有用!! :)