javascript - javascript/jquery 波动的随机百分比

标签 javascript jquery

所以我尝试根据百分比选择一个随机数。 0-5

0 - 25% (25/100)
1 - 25% (25/100)
2 - 20% (20/100)
3 - 15% (15/100)
4 - 10% (10/100)
5 - 5%  (5/100)

但是,有时需要在选取时省略其中一个或多个值。所以你可能会遇到这样的事情

0 - 25% (25/65)
2 - 20% (20/65)
3 - 15% (15/65)
5 - 5%  (5/65)

这意味着该百分比必须与其他数字成比例。

我想我可以使用随机函数来做这样的事情

var1 = Math.floor((Math.random() * 100) + 1);

//0 - 25% random(1-25)
//1 - 25% random(26-50)
//2 - 20% random(51-70)
//3 - 15% random(71-85)
//4 - 10% random(86-95)
//5 - 5%  random(96-100)

if(var1 <= 25){
  var2 = 0;
}else if(var1 <= 50){
  var2 = 1;
}else if(var1 <= 70){
  var2 = 2;
}else if(var1 <= 85){
  var2 = 3;
}else if(var1 <= 95){
  var2 = 4;
}else if(var1 <= 100){
  var2 = 5;
}else{
  // error
}

但是当省略一个或多个变量 (0-5) 时,我遇到了问题。可以设置一堆 if/else 语句,但这不是一个非常实用的解决方案。

有人知道我可以做到这一点的更好方法吗?

另外,如果您不确定我的问题是什么,请直接说出来。我会尽力更加具体和明确地表达我的意图。

最佳答案

我想,这正是你想要的。 Example

function RangeArray(diffs) {
    this.diffs = diffs;
}

// Omit range by index
RangeArray.prototype.omitAt = function(index) {
    var arr = this.diffs;

    // move value to the next item in array
    arr[index + 1] += arr[index];
    arr[index] = 0;
}

// Find index of range for value
RangeArray.prototype.indexOf = function(value) {
    var arr = this.diffs;
    var sum = 0;

    for (var index = 0; index < arr.length; ++index) {
        sum += arr[index];
        if (value < sum) {
            return index;
        }            
    }

    return -1;
}

// ------- tests ----------

// array of ranges created using your percentage steps
var ranges = new RangeArray([25,25,20,15,10,5]);

// your random values
var values = [1, 26, 51, 70, 86, 99];

// test resutls: indexes of ranges for values
var indexes;

console.log('ranges: 1-25, 26-50, 51-70, 71-85, 86-95, 96-100');
console.log('random values: ' + values.join(', '));

// for your random values indexOf should return 0, 1, 2, 3, 4, 5 accordingly
indexes = values.map(function(x) { return ranges.indexOf(x); });
console.log('test 1 results: ' + indexes.join(', '));

// omit range at index 1 and 4
ranges.omitAt(1);
ranges.omitAt(4);

// for your random values indexOf should return 0, 2, 2, 3, 5, 5 accordingly
indexes = values.map(function(x) { return ranges.indexOf(x); });
console.log('test 2 results: ' + indexes.join(', '));

关于javascript - javascript/jquery 波动的随机百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26679407/

相关文章:

Javascript 区域设置日期转换

javascript - 如何将参数从正在运行的 Node 脚本传递给 awk 命令?

javascript - Ng-map - 标记上的信息窗口有时不会出现

jQuery:这段代码的作用是什么?

javascript - 删除 AmCharts 中的灰色标题框

c# - 触发 UpdatePanel 触发器后立即执行 Javascript

jquery - 如何在 Canvas 中制作一个圆圈,当它的容器悬停时,圆圈的边框会增加几个px,或者建议?

javascript - d3 增加特定圆形节点的半径

jquery - 使用 Nth - CSS VS Jquery

javascript - 如何使用 JSON.parse 从 json 中提取值