admin管理员组文章数量:1356908
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="" frameborder="0" allowfullscreen></iframe>'],
['<iframe id="vid" src=";start=5&end=45" frameborder="0" allowfullscreen></iframe>'],
['<iframe id="vid" src="" frameborder="0" allowfullscreen></iframe>'],
['<iframe id="vid" src=";iv_load_policy=3" frameborder="0" allowfullscreen></iframe>'],
['<iframe id="vid" src=";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
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./embed/nYm2G4MnSkY?autoplay=1" frameborder="0" allowfullscreen></iframe>'],
['<iframe id="vid" src="https://www.youtube./embed/wAgZVLk6J4M?autoplay=1&start=5&end=45" frameborder="0" allowfullscreen></iframe>'],
['<iframe id="vid" src="https://www.youtube./embed/ix9wpslKwBE?autoplay=1" frameborder="0" allowfullscreen></iframe>'],
['<iframe id="vid" src="https://www.youtube./embed/OJJ-iLsQOPc?autoplay=1&iv_load_policy=3" frameborder="0" allowfullscreen></iframe>'],
['<iframe id="vid" src="https://www.youtube./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
Share
Improve this question
edited Sep 15, 2015 at 13:51
the
22k12 gold badges74 silver badges102 bronze badges
asked Sep 15, 2015 at 13:18
Karl TaylorKarl Taylor
5,2894 gold badges39 silver badges65 bronze badges
1
- 3 Maybe "Suffle an array" will help you ? stackoverflow./a/6274381/622813 – l2aelba Commented Sep 15, 2015 at 13:25
4 Answers
Reset to default 5use 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
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];
}
};
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./embed/nYm2G4MnSkY?autoplay=1" frameborder="0" allowfullscreen></iframe>',
'<iframe id="vid" src="https://www.youtube./embed/wAgZVLk6J4M?autoplay=1&start=5&end=45" frameborder="0" allowfullscreen></iframe>',
'<iframe id="vid" src="https://www.youtube./embed/ix9wpslKwBE?autoplay=1" frameborder="0" allowfullscreen></iframe>',
'<iframe id="vid" src="https://www.youtube./embed/OJJ-iLsQOPc?autoplay=1&iv_load_policy=3" frameborder="0" allowfullscreen></iframe>',
'<iframe id="vid" src="https://www.youtube./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. makes this simple:
var sequence = randoSequence(videoLinks);
Then, you can loop through videoLinks to get the values in random order. Here's how you get the first random value:
sequence[0].value
When you run out, just generate a new sequence if needed.
You just need to add the following to the head of your html document, and you can do pretty much whatever you want with randomness easily. Random numbers, random values from arrays, random jquery elements, random properties from objects, and even preventing repetitions as I've shown here.
<script src="https://randojs./1.0.0.js"></script>
本文标签: JavaScript generate random numbers without repeatingStack Overflow
版权声明:本文标题:JavaScript generate random numbers without repeating - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1743971817a2570720.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论