Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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_Arrays_Random - Fatal编程技术网

Javascript 如何使数组中的值一旦被使用,就可以';在阵列完成之前,是否不能再次使用?

Javascript 如何使数组中的值一旦被使用,就可以';在阵列完成之前,是否不能再次使用?,javascript,arrays,random,Javascript,Arrays,Random,在一个网站上,我希望当有人点击按钮时会出现一张随机图片。图片的URL包含在数组中的javascript文件中。到目前为止,它工作正常,但是我想让它一旦显示一张图片,它就不能再次显示,直到数组中的所有其他项都显示出来。换句话说,在阵列中的所有图片完成之前,我不希望任何图片显示两次。我应该在下面的代码中添加什么 var images = ["sample1.png", "sample2.png", "sample3.png", "sample4.png", "sample5.png",

在一个网站上,我希望当有人点击按钮时会出现一张随机图片。图片的URL包含在数组中的javascript文件中。到目前为止,它工作正常,但是我想让它一旦显示一张图片,它就不能再次显示,直到数组中的所有其他项都显示出来。换句话说,在阵列中的所有图片完成之前,我不希望任何图片显示两次。我应该在下面的代码中添加什么

var images = 
["sample1.png", 
"sample2.png", 
"sample3.png", 
"sample4.png", 
"sample5.png", 
"sample6.png", 
"sample7.png"];
var rand = images[Math.round(Math.random() * (images.length - 1))];

function test(){
rand = images[Math.round(Math.random() * (images.length - 1))];
document.getElementById("picture").style.background = "url('/images/"+rand+"') no-repeat center center";
}

你可以这样使用它

跟踪哪些可能性仍然存在,并在没有新可能性时重置

在本例中,我使用了字符串数组,但原理相同:)

jsfiddle:

你可以做点什么

基本上,保留一个可用图像的运行列表,并在使用完所有图像后将其重置

var defaultImages = ["sample1.png", "sample2.png", "sample3.png", "sample4.png", "sample5.png", "sample6.png", "sample7.png"],
    availImages = [],
    randomImage = '',
    button = document.getElementById('testButton');

button.onclick = test;

function test()
{
    if(availImages.length == 0)
            availImages = defaultImages.slice(0);

    randomImage = availImages[Math.floor(Math.random() * availImages.length)];

    var index = 0;
    for(indexLength = availImages.length; index < indexLength; index++)
    {
        if(availImages[index] == randomImage)
            break;
    }

    availImages.splice(index, 1)
    console.log(randomImage);
}
var defaultImages=[“sample1.png”、“sample2.png”、“sample3.png”、“sample4.png”、“sample5.png”、“sample6.png”、“sample7.png”],
可用性=[],
随机图像=“”,
button=document.getElementById('testButton');
button.onclick=测试;
功能测试()
{
if(availImages.length==0)
availImages=defaultImages.slice(0);
randomImage=availImages[Math.floor(Math.random()*availImages.length)];
var指数=0;
对于(indexLength=availImages.length;索引
洗牌数组,然后遍历它。创建另一个数组,在计算图像索引时,将相应数组中的布尔值设置为
true
。您可以针对每个索引与此数组进行比较。
var defaultImages = ["sample1.png", "sample2.png", "sample3.png", "sample4.png", "sample5.png", "sample6.png", "sample7.png"],
    availImages = [],
    randomImage = '',
    button = document.getElementById('testButton');

button.onclick = test;

function test()
{
    if(availImages.length == 0)
            availImages = defaultImages.slice(0);

    randomImage = availImages[Math.floor(Math.random() * availImages.length)];

    var index = 0;
    for(indexLength = availImages.length; index < indexLength; index++)
    {
        if(availImages[index] == randomImage)
            break;
    }

    availImages.splice(index, 1)
    console.log(randomImage);
}