JavaScript—通过非重复值循环,一次只显示一个值

JavaScript—通过非重复值循环,一次只显示一个值,javascript,random,shuffle,display,Javascript,Random,Shuffle,Display,我有一个按钮,用户可以点击这个页面生成一个随机报价 我是这样开始的: 函数随机化(){ var myrandom=Math.round(Math.random()*4) 如果(myrandom==0) document.getElementById(“randomQuote”).innerHTML=“Quote 01” else if(myrandom==1) document.getElementById(“randomQuote”).innerHTML=“Quote 02” else if

我有一个按钮,用户可以点击这个页面生成一个随机报价

我是这样开始的:

函数随机化(){
var myrandom=Math.round(Math.random()*4)
如果(myrandom==0)
document.getElementById(“randomQuote”).innerHTML=“Quote 01”
else if(myrandom==1)
document.getElementById(“randomQuote”).innerHTML=“Quote 02”
else if(myrandom==2)
document.getElementById(“randomQuote”).innerHTML=“Quote 03”
else if(myrandom==3)
document.getElementById(“randomQuote”).innerHTML=“Quote 04”
else if(myrandom==4)
document.getElementById(“randomQuote”).innerHTML=“Quote 05”
}
随机引用


保留原始引号的持久数组和尚未使用的引号的数组。每次单击按钮时,重新填充未使用的引号(如果为空),然后从中删除随机元素并显示:

const p=document.getElementById(“randomQuote”);
常量origQuotes=[“Quote 01”、“Quote 02”、“Quote 03”、“Quote 04”、“Quote 05”];
让remainingQuotes=[];
函数随机化(){
如果(remainingQuotes.length==0)remainingQuotes=origQuotes.slice();
常量{length}=剩余引号;
const[quote]=remaingquotes.splice(Math.floor(Math.random()*长度),1);
p、 text内容=报价;
}
随机引用

如果使用Fisher-Yates(和Knuth)算法,则可以使数组的洗牌到位且更快。请参见此处,以了解该算法的可视化效果: