簡體   English   中英

選擇數組中沒有的隨機值

[英]select random value NOT in array

如何選擇不在此數組中的隨機值(0到30)?

var list = new Array(1,3,4,7,8,9);

構建互補數組並從中選擇隨機值。

var list2 = new Array();
for(var i=0; i<30; i++)
  if(!list.contains(i))
    list2.push(i);

然后:

var rand = list2[Math.floor(Math.random() * list2.length)];

您需要一個while循環來測試rand是否在您的restricted數組中,如果是,則重新生成一個新的隨機數:

var rand;
do {
    rand = Math.floor(Math.random() * 31); // re-randomize, 0 to 30 inclusive
} while ($.inArray(rand, restricted) > -1);
return rand;

http://jsfiddle.net/mblase75/dAN8R/

不需要jQuery嗎? 您可以替換$.inArray(rand, restricted)restricted.indexOf(rand)如果你使用這個填充工具對舊的瀏覽器

假設列表的大小合理,請創建一個不在數組中的數字列表,然后從該數組中隨機選擇一個數字。

function RandomValueNotInArray(array)
{
    var e;
    do
    {
        e = Math.random() * 31; // n + 1
    } while (array.contains(e))
    return e;
}

一點遞歸功能:

getNum() {
  let randomNum = Math.floor(Math.random() * (30 - 1)) + 1
  if (list.includes(randomNum)) {
    return getNum()
  }
   return randomNum
}

可能要快一些,因為它首先嘗試返回一個隨機數,然后檢查它是否在數組中。

我可能會制作一個數組或鏈接列表,從中減去不需要的項目。 這樣,我可以繼續刪除項目,而只是從位置0到數組長度-1中隨機選擇項目,而不必兩次選擇相同的內容。

另一種方法是將0到30之間的數字隨機化,並在數組中找到它時繼續進行。 唯一的問題是知道何時陣列已滿(擺脫無限循環),並且整個陣列會占用更多的處理器。

您可以使用filter

var filteredArray = list.filter(function(e){
  return e!= Math.floor(Math.random() * (31));

});

PHP分2行:

$result = array_diff(range(1,30), array(1,3,4,7,8,9)); 
echo $result[array_rand($result)];

暫無
暫無

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

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