我有3个函数,我想能够随机运行它们而不使用两次以上。这是我快速整理的一些代码:
function func1() {
alert("1");
}
function func2() {
alert("2");
}
function func3() {
alert("3");
}
答案 0 :(得分:1)
你可能想要运行以下算法:
你有N个功能 - 随机运行从N中选择一个。
从数组中删除它(你不必实际删除它,你可以做vector的“删除”的C ++技巧,即将它移到后面并更新迭代器之类的元素)。运行随机选择N - 1中的一个。
继续迭代直到完成数组。简单,O(N)解决方案。
在我的Chrome,Linux Ubuntu 16.10,版本54.0.2840.71(64位)上,已接受的解决方案无法正常运行。它不会仅运行一次每个函数。例如它将运行1,1,3。
答案 1 :(得分:0)
类似于阿萨菲的答案,您可以将Math.random()与数组一起使用来轻松地做到这一点。
最好的(不同于接受的答案)否eval()!!!
首先创建一个数组,(如果添加重复的值,则可以从技术上确定一个“百分比”或“更高/更低的机会”,该功能将在另一个函数上执行。
// F1 and F2 have equal chances of Activating, while F3 is Rare.
// Remove Duplicates for them ALL to have an Equal Chance.
var array = ['F1','F1','F2','F2','F3']
接下来,您想将一个函数与If语句一起使用,以及一个数组随机化器。
var ranFunc;
function start() { // Randomly Execute Function
ranFunc = array[Math.floor(Math.random() * array.length)];
if (ranFunc == 'F1') {
// do stuff
}
if (ranFunc == 'F2') {
// do stuff
}
if (ranFunc == 'f3') {
// do stuff
}
}
答案 2 :(得分:0)
只需将函数组织成一个数组,使用随机数生成器,然后根据随机数拼接数组。
这样,您只需调用每个函数一次。
function func1() {
alert("1");
}
function func2() {
alert("2");
}
function func3() {
alert("3");
}
var funcs = [
func1,
func2,
func3
]
function execute() {
var i = Math.floor(Math.random() * funcs.length)
funcs.splice(i-1, 1)[0]()
}
execute()
execute()
execute()