一尘不染

运行随机数并保持状态

node.js

我使用以下代码从指定范围获取随机值

var provideRanges = function(){
    var aa = [];
    _.times(3, function(i) {
      console.log(i);
      let num = _.random(10, 20)
      console.log("num = :" + num)
      debugger;
      aa.push(num);
      console.log("value is :" + aa[i]);
    });
}

这是可行的,并在您调用此函数时在指定范围内提供3个值的数组,但是当我需要再次调用它时,这里的问题变得更加棘手,请忽略从提供的数字中排除 先前
提供的数字(例如下次不提供这些数字时提供10,11,12 …),还有更好的方法吗?我尝试使用回拨电话,但迷路了:(,任何想法该怎么做?


阅读 399

收藏
2020-07-07

共1个答案

一尘不染

一种方法是创建一个数组来存储现有选择,将选定的元素推入数组,检查该数组是否包含该元素,以及数组存储的值.length是否大于或等于最大范围减去最小范围。

从问题的描述中尚不清楚,一旦返回范围中的所有元素,将发生什么?

var range = [10, 20];

var not = [];



function randomRange(range, n) {

  if (not.length >= range[1] - range[0]) {

    return "all numbers in range used"

  }

  var curr = [];

  var res = [];

  for (let i = range[0]; i < range[1]; i++) {

    if (!not.some(function(num) {

      return i == num

    }) && not.length < range[1] - range[0]) {

      curr.push(i)

    }

  }

  for (let i = 0; i < n; i++) {

    var j = curr.splice(Math.floor(Math.random() * curr.length), 1)[0];

    res[i] = not[not.length] = j;

  }



  return res.filter(Boolean)

}



console.log(randomRange(range, 3));

console.log(randomRange(range, 3));

console.log(randomRange(range, 3));

console.log(randomRange(range, 3));

console.log(randomRange(range, 3));
2020-07-07