簡體   English   中英

如何從數組中生成隨機數量的項目

[英]how to generate random amount of items from an array

我正在嘗試從數組中獲取隨機數量的項目。

這是我到目前為止所得到的:

我正在使用最小值和最大值調用函數(在長代碼的另一部分):

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];

如果要生成隨機數量的項目,則需要:

  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));

但是,這不會生成唯一的數組,因為您基本上是從數組中隨機選擇項目(這意味着有可能發生值沖突)。

如果您想創建現有數組的混洗/隨機子集,那么此答案將最適合您的需求: 從數組中采樣隨機子集

您需要一個循環來獲取想要的項目,並將長度作為獲取隨機索引的因素。

 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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM