首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript从数组中给定的范围中选择随机数

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

Stack Overflow用户
提问于 2015-09-17 01:19:14
回答 2查看 642关注 0票数 1

我想使用Javascript在一定范围内选择随机数:

我想让它选择:

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

所以我的结果可能是:

  • 5
  • 125
  • 375
  • 四百七十五

每个范围内的随机整数.

目前,我的代码只是从数字的总体范围中获取一个随机数(即上面示例中的1-1500之间的随机数)。我已经为我的例子简化了数字。不确定它是否相关,但它是Parse.com中的云代码

这是我的JS的一个片段。如果你需要更多的话,请告诉我:

代码语言:javascript
复制
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');
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-17 04:11:33

我认为您需要重构randomRange()以消除其范围分布的随机性。

代码语言:javascript
复制
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_numbersindex % 4。

代码语言:javascript
复制
    for(var i = 0; i < n; i++) {
        var r = ranges[i % 4];
        a.push(getRandomInt1(r.min, r.max));
    }

更新:如果您想要不均衡的百分比,那么这样的方法可能会奏效:

代码语言:javascript
复制
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));
    }
}

..。

代码语言:javascript
复制
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/

票数 1
EN

Stack Overflow用户

发布于 2015-09-17 01:43:10

这样不行吗?

代码语言:javascript
复制
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)
}       
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32621187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档