调用随机函数Javascript,但不是两次相同的函数
Call random function Javascript, but not twice the same function
我使用一个随机选择另一个功能的功能,这个功能有效。
但有时它 运行 连续两次甚至更频繁地执行相同的功能。
有什么办法可以避免这种情况吗?
我当前的代码:
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) ;
注意:最后的;
很重要,就是说循环没有body。
它会生成一个随机数并将其分配给rand
并检查它是否等于lastIndex
。如果它们相同,则循环将再次 运行 直到 lastIndex
和 rand
不同。
然后将当前的rand
值赋给lastIndex
变量,因为我们不希望同一个函数被连续调用。
您可以select 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);
如何进行简单检查以防止选择与之前选择相匹配的索引?
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]();
这将在恒定时间内选择一个随机函数,保证与之前的函数不同。
我使用一个随机选择另一个功能的功能,这个功能有效。 但有时它 运行 连续两次甚至更频繁地执行相同的功能。
有什么办法可以避免这种情况吗?
我当前的代码:
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) ;
注意:最后的;
很重要,就是说循环没有body。
它会生成一个随机数并将其分配给rand
并检查它是否等于lastIndex
。如果它们相同,则循环将再次 运行 直到 lastIndex
和 rand
不同。
然后将当前的rand
值赋给lastIndex
变量,因为我们不希望同一个函数被连续调用。
您可以select 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);
如何进行简单检查以防止选择与之前选择相匹配的索引?
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]();
这将在恒定时间内选择一个随机函数,保证与之前的函数不同。