我想使用Javascript来选择某个范围之间的随机数:
我希望它选择:
所以我的结果可能是:
IE是每个范围内的随机整数。
目前,我的代码只从整个数字范围中取一个随机数(即我上面例子中的随机数在1-1500之间)。我为我的例子简化了数字。不确定它是否相关,但它是Parse.com中的云代码
这是我的JS的片段。如果您需要更多信息,请与我们联系:
Array.prototype.randomRange = function(n, ranges) {
var a = [];
for(var i = 0; i < n; i++) {
var range = getRandomInt1(0, ranges.length-1);
var r = ranges[range];
a.push(getRandomInt1(r.min, r.max));
}
return a;
};
Parse.Cloud.define("firstTimeQuery", function(request, response) {
var maxIndex = 91811;
var maxWomenIndex = 135354;
var maxMenIndex = 105357;
var arrayOfRandomNumbers;
var gender = request.params.gender;
var query = new Parse.Query("garmentsAPI");
function getRandomInt1(min, max) {
return Math.floor(Math.random() * (max - min+1)) + min;
}
if (gender === 'Female' || gender === 'women') {
arrayOfRandomNumbers = [].randomRange(25, [{min:10,max:20},{min:100,max:150},{min:300,max:400},{min:450,max:475}]);
query.containedIn("womenIndex", arrayOfRandomNumbers);
query.containedIn('gender', ['Female', 'women']);
query.notEqualTo("viewers", request.params.user);
console.log('female');
答案 0 :(得分:2)
这不起作用吗?
var n1 = Math.random()
if (n1 < 0.25) {
return parseInt(Math.random()*99+1)
} else
if (n1 < 0.5) {
return parseInt(Math.random()*100+150)
} else
if (n1 < 0.75) {
return parseInt(Math.random()*50+1350)
} else {
return parseInt(Math.random()*50+1450)
}
答案 1 :(得分:1)
我认为你需要重构randomRange()来删除其范围分布的随机性。
Array.prototype.randomRange = function(n, ranges) {
var a = [];
for(var i = 0; i < n; i++) {
var range = getRandomInt1(0, ranges.length-1);
var r = ranges[range];
a.push(getRandomInt1(r.min, r.max));
}
return a;
};
var range(index)是随机的,这就是为什么你没有在array_of_random_numbers中获得相同的25%分布。您可以删除此范围(索引),只需执行array_of_random_numbers [index%4]。也许是这样的:
for(var i = 0; i < n; i++) {
var r = ranges[i % 4];
a.push(getRandomInt1(r.min, r.max));
}
更新: 如果你想要不均匀的百分比,那么这样的事情可能有用:
for(var i = 0; i < ranges.length; i++) {
for(var j = 0; j < ranges[i].percent; j++) {
a.push(getRandomInt1(ranges[i].min, ranges[i].max));
}
}
...
randomRange(
[{min:10,max:20,percent:parseInt(.1*10)}, // 10% of 10
{min:100,max:150,percent:parseInt(.4*10)}, // 40%
{min:300,max:400,percent:parseInt(.3*10)}, // 30%
{min:450,max:475,percent:parseInt(.2*10)} // 20%
]