JavaScript生成随机数而不重复

时间:2015-09-15 13:18:06

标签: javascript random numbers

我有一些代码,我有一个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

4 个答案:

答案 0 :(得分:4)

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

这样的事情:(使用LastNumber存储lastNumber)如果已经使用了,我们将再试一次)

In [1]: %paste
import pandas as pd
bids = [100, 101, 101, 102]
offers = [101, 102, 102.25, 103]
data = {'bids': bids, 'offers': offers}
index = [0, 1, 1, 2]
df = pd.DataFrame(data=data, index=index)

In [2]: df
Out[2]:
   bids  offers
0   100  101.00
1   101  102.00
1   101  102.25
2   102  103.00

In [3]: df.ix[1]
Out[3]:
   bids  offers
1   101  102.00
1   101  102.25

In [4]: df.ix[1].tail(1)
Out[4]:
   bids  offers
1   101  102.25

答案 1 :(得分:0)

您可以创建一个数组来保留现有的数字。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

randojs.com使其变得简单:

Content-Transfer-Encoding: quoted-printable\n

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

rawMailBody

用尽时,如有需要,只需生成一个新序列即可。

您只需要在html文档的开头添加以下内容,就可以轻松随机地完成几乎所有您想做的事情。随机数,数组中的随机值,jquery元素中的随机数,对象中的随机属性,甚至可以防止重复,如我在此处所示。

var sequence = randoSequence(videoLinks);