Javascript 尝试无序移动以从数组和拼接中生成随机数,但对数组中剩余的最后一个元素继续未定义
在这里,我可以生成不重复的随机数。下面是相同的代码Javascript 尝试无序移动以从数组和拼接中生成随机数,但对数组中剩余的最后一个元素继续未定义,javascript,arrays,random,shuffle,Javascript,Arrays,Random,Shuffle,在这里,我可以生成不重复的随机数。下面是相同的代码 <body> <div id="bingo"> <script> let numbers = new Set() .add("B1") .add("B2") .add("B3")
<body>
<div id="bingo">
<script>
let numbers = new Set()
.add("B1")
.add("B2")
.add("B3")
.add("B4")
.add("B5")
.add("B6")
.add("B7")
.add("B8")
.add("B9")
.add("B10");
let called = Array.from(numbers);
let display = new Array();
function getRandomNum()
{
function rando()
{
for (let i = called.length - 1; i > 0; i++)
{
const j = Math.floor(Math.random() * called.length);
const number = called[i];
called[i] = called[j];
called[j] = number;
if(number)
{
called.splice(j, 1);
}
if(called.length < 0)
{
return;
} else
{
return number;
}
}
}
if(called.length === 0)
{
index = "No More Numbers";
}else
{
index = rando();
display.push(index);
}
document.getElementById('bingo').innerHTML = index;
}
function show()
{
for(let n = 0; n < display.length; n++)
{
document.getElementById('reveal').innerHTML += "<br/>" + display[n] + "<br/>";
}
}
</script>
</div>
<div id="button">
<button onclick="getRandomNum()">Random Number</button>
</div>
<br/>
<br/>
<br/>
<div id="reveal">
<button onclick="show()">Numbers Called</button>
</div>
</body>
</html>
我唯一的问题是,当它到达原始数组的最后一个元素时,它会生成未定义的值,而不是值
需要有关修复该零件的帮助,以便在随机生成并删除所有元素后,该零件不再显示数字。您需要使用以下内容替换for循环:
for (let i = 0; i < called.length; i++){
或者,如果你想按自己的方式做,只需做:
对于let i=called.length-1;i=>0;i++所以我尝试了这个循环,但是数组中的最后一个元素仍然没有定义,然后我得到了No More Numbers消息。我曾尝试使用called.length+1来查看是否有任何变化,但结果仍然相同。我猜这与洗牌有关,因为在数组末尾只有一个元素需要洗牌。这可能是影响它的原因吗?@p4yner56我似乎无法重现你提到的未定义的情况。请检查这里:这实际上是我的错误,我有一个打字错误,我一直丢失,除此之外,代码工作完美。再次感谢