JavaScript生成不重复的随机数

JavaScript generate random numbers without repeating

我有一些代码,其中包含 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 existingNumbers = [];
var maxNumbers = 5;
var randomNumber = function() {
  if (existingNumbers.length != maxNumbers) {
    do {
      getRandomNumber = Math.floor(Math.random() * maxNumbers);
    } while (existingNumbers.indexOf(getRandomNumber) > -1);
    existingNumbers.push(getRandomNumber);
   
    var random = videoLinks[getRandomNumber]
    document.getElementById("videoWrapper").innerHTML = random[0];
  }
};

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

像这样:(使用 LastNumber 来存储 lastNumber)如果它已经被使用,我们会再试一次)

var videoLinks = [
    ....
];

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

randomNumber(); // To call the function on load

首先,为什么要将所有这些字符串包装在数组中?我将它们放在下面的解决方案中。 无论如何,最简单和最干净的解决方案是克隆数组,并从新数组中删除选定的 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);
}

randojs.com 让这变得简单:

var sequence = randoSequence(videoLinks);

然后,您可以遍历 videoLinks 以随机顺序获取值。以下是获取第一个随机值的方法:

sequence[0].value

当您 运行 退出时,如果需要,只需生成一个新序列。

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

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