javascript - 运行随机数并保持状态

标签 javascript node.js algorithm ecmascript-6 lodash

<分区>

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

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 个值的数组,但是当我需要时这里的问题变得更加困难,如果我再次调用它忽略排除 previous从提供的数字中提供数字(比如如果下次不应该提供这些数字时它提供 10、11、12 ...),是否有更好的方法来做到这一点?我尝试使用递归调用但迷路了:(,知道怎么做吗?

最佳答案

一种方法是创建一个数组来存储现有的选择,将选定的元素推送到数组,检查数组是否包含该元素以及存储值 .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));

关于javascript - 运行随机数并保持状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41001101/

相关文章:

javascript - 如何静态加载子网格?

node.js - Asterisk + Node.js + 浏览器流

javascript - 如何将数据从 ReactJS 发布到 NodeJS Express API

algorithm - RS散列程序

javascript - 以下 JavaScript 代码与 Facebook 相关

javascript - 通过 $(document).ready 传递范围

algorithm - 查找重叠的集合的间隔

algorithm - 给定流网络和边 e,描述确定 e 是否穿过某个最小割的算法

javascript - 使用 React Router v6 渲染 React 组件变量

node.js - AppEngine NodeJS 灵活内存缓存未定义 GAE_MEMCACHE_HOST 和 GAE_MEMCACHE_PORT