Javascript随机元素,而不重复最后一个元素
我有一些JavaScript,它从数组中获取一个随机元素。当我按下一个按钮时,它会选择另一个随机元素。如何防止同一元素在一行中被选中两次 以下是随机元素代码:Javascript随机元素,而不重复最后一个元素,javascript,random,Javascript,Random,我有一些JavaScript,它从数组中获取一个随机元素。当我按下一个按钮时,它会选择另一个随机元素。如何防止同一元素在一行中被选中两次 以下是随机元素代码: var arr= ["cat1.jpg", "cat2.jpg", "cat3.jpg", "cat4.jpg", "cat5.jpg", "cat6.jpg", "cat7.jpg", "cat8.jpg", "cat9.jpg","cube1.jpg", "cube2.jpg", "cube3.jpg", "cube4.jpg", "
var arr= ["cat1.jpg", "cat2.jpg", "cat3.jpg", "cat4.jpg", "cat5.jpg", "cat6.jpg", "cat7.jpg", "cat8.jpg", "cat9.jpg","cube1.jpg", "cube2.jpg", "cube3.jpg", "cube4.jpg", "cube5.jpg", "cube6.jpg", "cube7.jpg", "cube8.jpg"];
let randomElement = arr[Math.floor(Math.random() * arr.length)];
console.log(randomElement);
image.src=(randomElement);
这里是按钮的代码:
catbutton.onclick=function(){catfunction()};
function catfunction(){
if (randomElement=="cat1.jpg" || randomElement=="cat2.jpg" || randomElement=="cat3.jpg" || randomElement=="cat4.jpg" || randomElement=="cat5.jpg" || randomElement=="cat6.jpg" || randomElement=="cat7.jpg" || randomElement=="cat8.jpg" || randomElement=="cat9.jpg"){
x++;
randomElement = arr[Math.floor(Math.random() * arr.length)];
console.log(randomElement);
console.log(randomElement);
image.src=(randomElement);
}
else{
pantplay.style="display: none";
puntuator.style="display: ";
puntuation.innerHTML=x;
closepunt.onclick=function(){closepuntuation()};
}
}
您可以将最后一个选定元素的索引存储为变量,并使用do while循环来确保下一个随机数不等于该变量 伪代码:
do{
randIndex=Math.floor(Math.random()*arr.length);
}
而(randIndex==lastIndex);
randomElement=arr[randIndex];
lastIndex=randIndex;
您可以将最后一个选定元素的索引存储为变量,并使用do-while循环来确保下一个随机数不等于该变量
伪代码:
do{
randIndex=Math.floor(Math.random()*arr.length);
}
而(randIndex==lastIndex);
randomElement=arr[randIndex];
lastIndex=randIndex;
一个选项是将暂时不可用的项目放在一边。如果要使它们再次可用,请将其移回原位
函数createPseudorandomGenerator(收集,可用){
const available=Array.from(集合);
常量不可用=[];
返回函数(){
console.log(“可用:”,…可用);
console.log(“不可用:”,…不可用);
const index=Math.floor(Math.random()*可用.length);
常数项=可用。拼接(索引,1);
不可用。取消移动(…项);
可用。推送(…不可用。拼接(turnsUnavailable,1));
console.log(“take:,items[0]);
退货项目[0];
};
}
var arr=[“cat1.jpg”、“cat2.jpg”、“cat3.jpg”、“cat4.jpg”、“cat5.jpg”、“cat6.jpg”、“cat7.jpg”、“cat8.jpg”、“cat9.jpg”、“cube1.jpg”、“cube2.jpg”、“cube3.jpg”、“cube4.jpg”、“cube5.jpg”、“cube6.jpg”、“cube7.jpg”、“cube8.jpg”];
const takeBtn=document.getElementById(“take btn”);
const getRandom=createPseudorandomGenerator(arr,3);
takeBtn.addEventListener(“单击”,获取随机)代码>
Take
一个选项是将暂时不可用的项目放在一边。如果要使它们再次可用,请将其移回原位
函数createPseudorandomGenerator(收集,可用){
const available=Array.from(集合);
常量不可用=[];
返回函数(){
console.log(“可用:”,…可用);
console.log(“不可用:”,…不可用);
const index=Math.floor(Math.random()*可用.length);
常数项=可用。拼接(索引,1);
不可用。取消移动(…项);
可用。推送(…不可用。拼接(turnsUnavailable,1));
console.log(“take:,items[0]);
退货项目[0];
};
}
var arr=[“cat1.jpg”、“cat2.jpg”、“cat3.jpg”、“cat4.jpg”、“cat5.jpg”、“cat6.jpg”、“cat7.jpg”、“cat8.jpg”、“cat9.jpg”、“cube1.jpg”、“cube2.jpg”、“cube3.jpg”、“cube4.jpg”、“cube5.jpg”、“cube6.jpg”、“cube7.jpg”、“cube8.jpg”];
const takeBtn=document.getElementById(“take btn”);
const getRandom=createPseudorandomGenerator(arr,3);
takeBtn.addEventListener(“单击”,获取随机)代码>
Take
请将您的代码包括在内,并尽量把问题弄清楚(恐怕我不理解“获取随机元素,而不必指定最后一个”)@DBS我编辑了这个问题,我相信现在您会理解的。顺便说一句,问题已经解决了,我能做什么?再澄清一点:您试图从数组中获取一个随机项,但希望避免连续两次获取同一项?(至于被关闭的问题,编辑它直到你认为它处于良好状态,然后人们会投票重新打开它,如果他们认为它现在是一个有效的问题)@DBS是的,这就是我想做的。顺便说一句,我编辑了这个问题,我认为现在很好,我会先洗牌数组,然后从列表中弹出,除非你真的希望出现重复,而不是检查最后的匹配。请包括你的代码,并尽量把问题弄清楚(恐怕我不明白)“获取一个随机元素,而不是最后一个”)@DBS我编辑了这个问题,我相信现在你会理解的。顺便说一下,这个问题已经解决了,我能做什么?再澄清一下:你试图从数组中获取一个随机项,但你想避免连续两次获取同一项吗?(对于要关闭的问题,编辑它直到您认为它处于良好状态,然后如果人们认为它现在是有效问题,他们将投票重新打开它)@DBS是的,这就是我想做的。顺便说一句,我编辑了这个问题,我认为现在很好,我只需要洗牌数组开始并从列表中弹出,除非你真的希望出现重复,而不仅仅是检查最后是否匹配。你的意思是像var lastElement=randomElement
?我更改了一些东西以使代码更简单越来越清晰。您是对的,每次选择新索引时都需要重新分配lastElement(我切换到lastIndex)变量。您的意思是像var lastElement=randomElement
?我更改了一些内容,使代码更清晰。您是对的,需要重新分配lastElement(我每次选择新索引时都切换到lastIndex)变量。但是在´´´´image.src()´´´中,我应该写什么?image.src=getRandom()
如果您希望项目只在下一轮中不可用,请不要忘记将createPseudorandomGenerator(arr,3)
中的3
更改为1
“.3
仅用于演示目的,将使生成的项目在3”回合内不可用”生成后。但它不会加载任何图像。图像之前是否正确加载?控制台。记录图像
并检查源是否正确设置。您可能没有可用的资源。请记住src=“c