首页 > 解决方案 > Javascript随机元素,不重复最后一个

问题描述

我有一些 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()};
    }
}

标签: javascriptrandom

解决方案


您可以将选择的最后一个元素的索引存储为变量,并使用 do-while 循环来确保下一个随机数不等于该变量。

伪代码:

do {
    randIndex = Math.floor(Math.random() * arr.length);
}
while(randIndex == lastIndex);

randomElement = arr[randIndex];
lastIndex = randIndex;

推荐阅读