javascript - 如何从数组中生成随机数量的项目
问题描述
我正在尝试从数组中获取随机数量的项目。
这是我到目前为止所得到的:
我用最小值和最大值调用函数(在长代码的另一部分):
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 个
重复项是可以的,我不关心项目的顺序
解决方案
这是因为在代码的这一行中,您正在生成一个包含单个条目的数组:
var randomItem = myArray[Math.floor(Math.random()* (max - min)) + min];
如果要生成随机数量的项目,则需要:
- 使用
min
andmax
值生成随机长度的数组 - 生成数组后,您可以使用
Array.prototype.map
.
请注意,您的原始逻辑有缺陷:如果您想从数组中选择一个随机元素。使用myArray[Math.floor(Math.random() * myArray.length]
应该工作。min
and ,正如我对您的情况所怀疑的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
推荐阅读
- google-chrome - 如何将 cookie 从 Chrome 传递到通过自定义协议处理程序启动的 IE?
- python - 烧瓶,无法在同一目录中导入python模块
- excel - Excel - 使用一个标准计算日期范围内的不同日期
- javascript - 在 ReactJS 应用程序的生产环境中添加源映射对性能有影响吗?
- php - .htaccess 文件在尝试清理 url 后抛出 500 错误
- azure-backup-vault - Azure Backup Vault 还原到另一台服务器
- processing - Acumatica:自定义处理屏幕 -
- python - 两个日期到秒之间的 Python 日期时间差(数据框对象)
- kotlin - 通过标签 Kotlin 从内部嵌套协程返回
- python - 将这个没有列的文本文件放入熊猫数据框中的最佳方法是什么?