调用随机函数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) ;
注意:末尾的;
很重要,也就是说循环没有正文。
它将生成一个随机数,并将其分配给rand
,并检查它是否等于lastIndex
。如果它们相同,则循环将再次运行,直到lastIndex
和rand
不同。
然后将当前的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);
相关文章:
- 如何从模块链中调用函数.导出到节点中
- 调用函数内部的函数
- 在javascript中调用c函数
- DropDownListFor赢得't在更改时调用函数
- Javascript页面调用函数
- 在动画结束之前调用函数
- 允许父窗口在其不同域的子iframe上调用函数
- 运行Infinite Scroll后调用函数时出现问题
- JavaScript:在调用函数的文本输入上按enter键
- 使用大括号和不使用bracs调用函数的区别
- javascript在事件上调用函数
- 从index.html调用函数,该函数无限循环
- 从带参数的字符串变量调用函数中的函数
- 为什么 JS 不在滚动时调用函数
- 是否可以在不更改上下文的情况下调用函数.apply
- 如何在ES6类中使用参数调用函数
- AngularJS:调用函数时编号不更新
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 在JavaScript中调用函数时自定义此选项
- 调用函数中声明的变量