JavaScript generate random numbers without repeating

匿名 (未验证) 提交于 2019-12-03 02:20:02

问题:

I have some code where I have an array of x amount of items. In this case, videos, and I want to randomly call a video, however if the current video already called is the same as the random number I want it to generate another random number until it's unique.

Here's my code:

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 

回答1:

use a variable to check if the number is the same.

something like this: (using LastNumber to store the lastNumber) if it allready is used we gonna try again)

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 


回答2:

You can create an array to keep the exiting generated numbers.

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];   } };


回答3:

First of all, why do you wrap all those strings in Arrays? I dropped them in my solution below. Anyway, easiest and cleanest solution is to clone the Array, and drop the selected URL from the new Array.

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); } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!