首页 > 解决方案 > 如何从数组中生成随机数量的项目

问题描述

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

这是我到目前为止所得到的:

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

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 个
重复项是可以的,我不关心项目的顺序

标签: javascriptarrays

解决方案


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

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

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

  1. 使用minandmax值生成随机长度的数组
  2. 生成数组后,您可以使用Array.prototype.map.

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

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


推荐阅读