可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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); }