2016-07-05 17 views
0

我有一個用戶數組叫randomUserArray。從那裏我想檢索一個隨機的用戶並將其傳遞。如果所選用戶與clientNickname相同,則需要重新啓動該功能,以便它不會返回也是clientNicknamerandomRecipient。無論如何,我的函數將返回它們。循環功能的內部,直到達到目標

function randomRecipientCalc (clientNickname){ 

    var randomRecipient = randomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 

    while (randomRecipient == clientNickname) { 

    randomRecipient = randomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 

    } 

    return randomRecipient; 

} 

比方說,我有兩個用戶在我的陣列(至極將是最小的,在任何給定時間)

`var randomUserArray = ["user1","user2"]` 

和「USER1」也正在客戶端

var clientNickname = "user1" 

然後我用

var Recipient = randomRecipientCalc(); 

得到你ser選擇的功能。這種情況是否需要成爲「user2」。 如果它不是,意思

randomRecipient == clientNickname 

我有控制檯打印錯誤。它現在確實如此。

+0

If(randomRecipient == clientNickname){return randomRecipientCalc(clientNickname);} else {return randomRecipient) – user3791775

+0

您可以使用'do'-'while'循環來簡化它,但它正在工作嗎?請發佈您的輸入不起作用。 – Bergi

+0

請注意,您將得到一個無限循環(或超過最大堆棧範圍,帶有@ user3791775的答案)和單元素用戶數組。 – nrabinowitz

回答

0

您可以通過刪除重複的元素簡化問題。例如:

var temporaryRandomUserArray = randomUserArray.filter(function(ele) { 
    return !(ele === clientNickname); // keep if ele not equal to clientNickname 
}); 
temporaryRandomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 
... 
.. 

這樣的事情很整潔。不需要遞歸函數調用。

+0

是的,確實如此。 100多次嘗試,沒有加倍的用戶。似乎工作!非常感謝! – somejonus

0

您的代碼爲我工作:

var randomUserArray = ["b","b","b","c","b","b"]; 

    function randomRecipientCalc (clientNickname){ 

     var randomRecipient = randomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 

     while (randomRecipient == clientNickname) { 

     randomRecipient = randomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 

      } 

      return randomRecipient; 

     } 

     console.log(randomRecipientCalc("b")); 
+0

我想你誤解了該功能應該做的事情。不管怎麼說,還是要謝謝你! – somejonus