Javascript从数组中的给定范围中选择随机数

时间:2015-09-17 01:19:14

标签: javascript random

我想使用Javascript来选择某个范围之间的随机数:

我希望它选择:

  • 25%的随机数在10到20之间
  • 25%的随机数在100到150之间
  • 25%的随机数在300到400之间
  • 25%的随机数在450到475之间

所以我的结果可能是:

  • 5
  • 125
  • 375
  • 475

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');

2 个答案:

答案 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%
]

http://jsfiddle.net/wokokonono/jjz977um/10/