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

Call random function Javascript, but not twice the same function

本文关键字:调用 函数 两次 随机 Javascript 但不能      更新时间:2024-04-07

我使用了一个随机选择另一个函数的函数,它可以工作。但有时它会连续两次甚至更频繁地运行同一个函数。

有办法避免这种情况吗?

我当前的代码:

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

到目前为止还很简单。但是我如何防止func1(例如)在一行中运行两次

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

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变量,因为我们不希望连续调用同一个函数。

用一个简单的检查来防止拾取与上一个拾取匹配的索引怎么样?

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]();

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

您可以从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);