调用随机函数Javascript,但不是两次相同的函数

时间:2015-02-22 08:32:31

标签: javascript function random

我使用一个随机选择另一个函数的函数。 但有时它会连续运行两次甚至更多次的相同功能。

有没有办法预先知道这个?

我目前的代码:

window.setInterval(function(){
        var arr = [func1, func2, func3],
        rand = Math.floor(Math.random() * arr.length),
        randomFunction = arr[rand];
        randomFunction();
}, 5000);

到目前为止非常简单。但是如何阻止func1(例如)连续运行两次

3 个答案:

答案 0 :(得分:4)

你可以简单地存储最后一个被调用函数的索引,下一次,得到一个不是最后看到的索引的随机数,就像这样

var lastIndex, arr = [func1, func2, func3];

window.setInterval(function() {
    var rand;
    while ((rand = Math.floor(Math.random() * arr.length)) === lastIndex) ;
    arr[(lastIndex = rand)]();
}, 5000);

此处while循环是关键,

while ((rand = Math.floor(Math.random() * arr.length)) === lastIndex) ;

注意:最后的;很重要,也就是说循环没有正文。

它将生成一个随机数并将其分配给rand并检查它是否等于lastIndex。如果它们相同,则循环将再次运行,直到lastIndexrand不同。

然后将当前rand值分配给lastIndex变量,因为我们不希望连续调用相同的函数。

答案 1 :(得分:0)

您可以从0-1中选择随机值。每次运行后,将数组中最近执行的函数与数组中的最后一个元素交换,即arr [2]。

var arr = [func1, func2, func3];
window.setInterval(function(){
    var t, rand = Math.floor(Math.random() * (arr.length-1)),
    randomFunction = arr[rand];
    t = arr[rand], arr[rand] = arr[arr.length-1], arr[arr.length-1] = t;
    randomFunction();
}, 5000); 

答案 2 :(得分:0)

如何进行简单检查以防止选择与上一个选择匹配的索引?

var arr = [func1, func2, func3, ...];
var previousIndex = false;

var pickedIndex;
if (previousIndex === false) { // never picked anything before
  pickedIndex = Math.floor(Math.random() * arr.length);
}
else {
  pickedIndex = Math.floor(Math.random() * (arr.length - 1));
  if (pickedIndex >= previousIndex) pickedIndex += 1;
}
previousIndex = pickedIndex;
arr[pickedIndex]();

这将在恒定时间内选择一个随机函数,保证与前一个函数不同。