【问题标题】:how to generate random amount of items from an array如何从数组中生成随机数量的项目
【发布时间】:2020-06-26 21:21:00
【问题描述】:

我正在尝试从数组中获取随机数量的项目。

这是我目前得到的:

我正在使用最小值和最大值调用函数(在长代码的另一部分):

generateitems(1,7)

剩下的就这些了:

function generateitems(min, max) {
  var myArray = ["aa","bb","cc","dd","ee","ff","gg"];
  var randomItem = myArray[Math.floor(Math.random()* (max - min)) + min];
  return randomItem;
}

结果我一直只得到一件。我该如何解决这个问题?

我知道如何从数组中生成一个/特定数量或所有项目,并且当我这样做时我的程序可以工作 - 所以我认为我的其余代码没有问题。我只是不知道如何在这里使用 Math.random,或者在这种情况下使用它是否正确。

感谢您的宝贵时间。

编辑:
想要的结果:
该函数应返回 1-7 个项目
重复是可以的,我不关心项目的顺序

【问题讨论】:

  • 请添加想要的结果。
  • 每个项目不超过一次或是否允许重复?随机洗牌或按顺序但随机选择?如果 max 大于数组的长度会发生什么?我有很多问题...

标签: javascript arrays


【解决方案1】:

这是因为在代码的这一行中,您正在生成一个包含单个条目的数组:

var randomItem = myArray[Math.floor(Math.random()* (max - min)) + min];

如果要生成随机数量的项目,则需要:

  1. 使用minmax 值生成随机长度的数组
  2. 生成数组后,然后使用Array.prototype.map 将随机项推入其中。

请注意,您的原始逻辑有缺陷:如果您想从数组中选择一个随机元素。使用myArray[Math.floor(Math.random() * myArray.length] 应该可以。 minmax,我怀疑你的情况,仅用于确定 随机生成数组的长度

function generateitems(min, max) {
  var myArray = ["aa","bb","cc","dd","ee","ff","gg"];
  var arrayLength = Math.floor(Math.random()* (max - min)) + min
  
  return [...new Array(arrayLength)].map(function() {
    return myArray[Math.floor(Math.random()* myArray.length)];
  });
}

console.log(generateitems(1,7));

但是,这不会生成唯一的数组,因为您基本上是从数组中随机选择项目(这意味着有可能发生值冲突)。

如果您想要创建现有数组的随机/随机子集,那么这个答案将最适合您的需求:Sampling a random subset from an array

【讨论】:

    【解决方案2】:

    您需要一个循环来获取想要的项目,并将长度作为获取随机索引的因素。

    function generateitems(min, max) {
      var values = ["aa","bb","cc","dd","ee","ff","gg"],
          result = [],
          items = Math.floor(Math.random() * (max - min)) + min;
          
      while (items--)
          result.push(values[Math.floor(Math.random() * values.length)]);
      
      return result;
    }
    
    console.log(generateitems(1, 7));

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      相关资源
      最近更新 更多