Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript随机元素,而不重复最后一个元素_Javascript_Random - Fatal编程技术网

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", "

我有一些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", "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