我正在参加随机报价生成器免费代码训练营挑战,但不想连续两次出现相同的报价。我得出了与这里的人完全相同的结论:https://codereview.stackexchange.com/questions/62018/prevent-repetitive-random-numbers
然而,他说他的作品,但我的作品仍然没有。我的笔可以在这里找到:http://codepen.io/thomasdean/pen/qZGQxK
代码是:
$(document).ready(function() {
$("#getQuote").on("click", function() {
$.getJSON("http://codepen.io/thomasdean/pen/Yqmgyx.js", function(json) {
var html = "";
var lastQuote = "";
var whichQuoteToChoose = "";
while (whichQuoteToChoose === lastQuote) {
whichQuoteToChoose = Math.floor(Math.random() * 12); // returns a number between 0 and 11
}
lastQuote = whichQuoteToChoose;
// this converts raw data into html
json = json.filter(function(val) {
return (val.id == whichQuoteToChoose);
});
json.forEach(function(val) {
html += "<div class = 'quote'>"
html += "<h2>\"" + val.Quotation + "\"</h2><h2>" + val.Quotee + "</h2>"
html += "</div>"
});
$(".quote").html(html);
});
});
});
理论上,使用 while 循环和紧随其后的赋值应该可以解决问题。
感谢您的所有帮助。
最佳答案
只是不要在每个点击事件上重写lastQuote 和whichQuoteToChoose。所以我将这些变量移出点击事件:)
$(document).ready(function() {
var lastQuote = "";
var whichQuoteToChoose = "";
$("#getQuote").on("click", function() {
$.getJSON("http://codepen.io/thomasdean/pen/Yqmgyx.js", function(json) {
var html = "";
//alert(lastQuote)
while (whichQuoteToChoose === lastQuote) {
whichQuoteToChoose = Math.floor(Math.random() * 12); // returns a number between 0 and 11
}
lastQuote = whichQuoteToChoose;
// this converts raw data into html
json = json.filter(function(val) {
return (val.id == whichQuoteToChoose);
});
json.forEach(function(val) {
html += "<div class = 'quote'>"
html += "<h2>\"" + val.Quotation + "\"</h2><h2>" + val.Quotee + "</h2>"
html += "</div>"
});
$(".quote").html(html);
});
});
});
关于javascript - 为什么我的避免连续生成两个随机数的简单例程不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417722/