JavaScript不重复地生成随机数

JavaScript不重复地生成随机数,javascript,random,numbers,Javascript,Random,Numbers,我有一些代码,其中我有一个x数量的项目数组。在这种情况下,视频,我想随机调用一个视频,但是如果当前已调用的视频与随机数相同,我希望它生成另一个随机数,直到它是唯一的 这是我的密码: var videoLinks = [ ['<iframe id="vid" src="https://www.youtube.com/embed/nYm2G4MnSkY?autoplay=1" frameborder="0" allowfullscreen></iframe>'],

我有一些代码,其中我有一个x数量的项目数组。在这种情况下,视频,我想随机调用一个视频,但是如果当前已调用的视频与随机数相同,我希望它生成另一个随机数,直到它是唯一的

这是我的密码:

var videoLinks = [
    ['<iframe id="vid" src="https://www.youtube.com/embed/nYm2G4MnSkY?autoplay=1" frameborder="0" allowfullscreen></iframe>'],
    ['<iframe id="vid" src="https://www.youtube.com/embed/wAgZVLk6J4M?autoplay=1&start=5&end=45" frameborder="0" allowfullscreen></iframe>'],
    ['<iframe id="vid" src="https://www.youtube.com/embed/ix9wpslKwBE?autoplay=1" frameborder="0" allowfullscreen></iframe>'],
    ['<iframe id="vid" src="https://www.youtube.com/embed/OJJ-iLsQOPc?autoplay=1&iv_load_policy=3" frameborder="0" allowfullscreen></iframe>'],
    ['<iframe id="vid" src="https://www.youtube.com/embed/rore790l_sk?autoplay=1&start=12&end=94" frameborder="0" allowfullscreen></iframe>'],
];

var randomNumber = function () {
    var getRandomNumber = Math.floor(Math.random() * 5);
    var random = videoLinks[getRandomNumber]
    document.getElementById("videoWrapper").innerHTML = random[0];
};

randomNumber(); // To call the function on load
var视频链接=[
[''],
[''],
[''],
[''],
[''],
];
var randomNumber=函数(){
var getRandomNumber=Math.floor(Math.random()*5);
var random=视频链接[getRandomNumber]
document.getElementById(“videoWrapper”).innerHTML=random[0];
};
随机数();//在加载时调用函数

您可以创建一个数组来保存现有生成的数字

var existingNumbers=[];
var maxNumbers=5;
var randomNumber=函数(){
if(existingNumbers.length!=maxNumbers){
做{
getRandomNumber=Math.floor(Math.random()*maxNumbers);
}while(existingNumbers.indexOf(getRandomNumber)>-1);
ExistingNumber.push(getRandomNumber);
var random=视频链接[getRandomNumber]
document.getElementById(“videoWrapper”).innerHTML=random[0];
}

};使用变量检查数字是否相同

类似这样:(使用LastNumber存储LastNumber)如果使用allready,我们将重试)


首先,为什么要将所有这些字符串包装在数组中?我把它们放在下面的解决方案中。 无论如何,最简单、最干净的解决方案是克隆阵列,并从新阵列中删除选定的URL

var videoLinks = [
    '<iframe id="vid" src="https://www.youtube.com/embed/nYm2G4MnSkY?autoplay=1" frameborder="0" allowfullscreen></iframe>',
    '<iframe id="vid" src="https://www.youtube.com/embed/wAgZVLk6J4M?autoplay=1&start=5&end=45" frameborder="0" allowfullscreen></iframe>',
    '<iframe id="vid" src="https://www.youtube.com/embed/ix9wpslKwBE?autoplay=1" frameborder="0" allowfullscreen></iframe>',
    '<iframe id="vid" src="https://www.youtube.com/embed/OJJ-iLsQOPc?autoplay=1&iv_load_policy=3" frameborder="0" allowfullscreen></iframe>',
    '<iframe id="vid" src="https://www.youtube.com/embed/rore790l_sk?autoplay=1&start=12&end=94" frameborder="0" allowfullscreen></iframe>'
];
var temp = videoLinks.slice();

function randomVideo(){
  var r = Math.floor(Math.random()*temp.length);
  return temp.splice(r, 1);
}
var视频链接=[
'',
'',
'',
'',
''
];
var temp=videoLinks.slice();
函数随机数视频(){
var r=数学地板(数学随机()*温度长度);
接头返回温度(r,1);
}
使这一点变得简单:

var sequence = randoSequence(videoLinks);
然后,您可以通过视频链接循环以随机顺序获取值。以下是获得第一个随机值的方法:

sequence[0].value
当您用完时,如果需要,只需生成一个新序列

您只需将以下内容添加到html文档的开头,就可以轻松地使用随机性做任何事情。随机数、数组中的随机值、随机jquery元素、对象中的随机属性,甚至防止重复,如我在这里所示

<script src="https://randojs.com/1.0.0.js"></script>


您忘了将值设置为ExistingNumbers“Suffle a array”可能会对您有所帮助?这正是我要找的,我实在想不起来。非常感谢。你还缺了一个};在结尾,我不太确定你的意思,我将它们包装在数组中,这样我就可以使用randomNumber()调用它们。不,我的意思是:为什么要将每个字符串包装在一个单独的数组中?我在解决方案中添加了
视频链接
,但没有添加不必要的额外数组。当我使用单个数组时,它只回调单个字符,而不是整个数组?@kot这是问题中未显示的代码,对吗?无论如何,我的randomVideo函数返回一个单项目数组,即您使用它的方式:
document.getElementById(“videoWrapper”).innerHTML=randomVideo()[0]
<script src="https://randojs.com/1.0.0.js"></script>