2017-05-18 104 views
-2

我使用的Math.random()到1之間產生隨機數隨機項然而,許多項目是在陣列中availableNumbers()檢索數組返回「未定義」

然而,當文檔的innerHTML與此更新,建議的數字解析爲undefined,

我試着從randomNumber中減去1,但這並沒有什麼區別。

我檢查了W3文件,它看起來像,這是正確的實現......

如何將一個最好的去從陣列中檢索隨機項?有沒有比我想要實現的更好的實現?

var availableNumbers = ["0", "911"]; 
function numberSuggestion() { 
    var randomNumber = Math.random() * availableNumbers.length -1; 
    var suggestedNumber = availableNumbers[randomNumber]; 
    document.getElementById("suggestion").innerHTML = "How about dialing " + suggestedNumber + "? Don't like this number? Click the button above again!"; 
} 
+3

'的console.log(randomNumber);'---經驗法則,當你調試:確保每個時間點的每個變量都具有期望值。 – zerkms

+0

@zerkms我不知道爲什麼我會使用console.log? – InterLinked

+2

因爲那麼你會看到它爲什麼不起作用... – nnnnnn

回答

0

用一個整數乘以Math.random()將產生在範圍[0的浮點值,數)。您需要刪除的小數部分得到的整數部分:

var randomNumber = Math.floor(Math.random() * availableNumbers.length); 
+0

謝謝,但這並沒有解決問題。我想,因爲它會解決一個整數,OOO不會影響。 – InterLinked

+0

沒有-1,這個作品完美! (所以我想我不需要減去1!) – InterLinked

+2

如果解釋涵蓋了關於需要整數結果的關鍵點,可能會很酷。 (我知道顯示的代碼是這樣做的,但考慮到解釋中提到的其他內容,'Math.floor()'部分似乎不那麼重要。) – nnnnnn

-1

呦試試這個功能:

Array.prototype.choice = function(){ 
    return this[~~(Math.random()*this.length)]; 
}; 

// now you can call it like this :) 
console.log(["0", "911"].choice()); 
+2

原始代碼有什麼問題,以及爲什麼這會修復它? (我知道你已經顯示的代碼確實有效,但是一個解釋對初學者會有幫助。) – nnnnnn

+0

更好,可重用,更快,更易讀,一切都可以 – nick

+4

修改內置原型肯定不是「可重用」,「可讀「或」一切「。也''''''''''''''''''''''''''''''''''''''''不要太棘手, – zerkms