我有以下问题:
我想调用我的函数func1()
,func2()
& func3()
以随机顺序排列。
但我想确保调用每个函数!
如果可能的话,没有使用任何功能也会很好;只是一个随机的代码序列。 像这样:
function xy(){
//Call this sequence first second or third
doSomething1
//Call this sequence first second or third
doSomething2
//Call this sequence first second or third
doSomething3
//!! But call each sequence !!
}
在此先感谢;)
答案 0 :(得分:3)
您可以将所有函数名称作为字符串放入Array中,然后对该数组进行随机排序并调用函数:
var funcArr = new Array("func1", "func2", "func3");
shuffle(funcArr); //You would need a shuffle function for that. Can be easily found on the internet.
for (var i = 0; i < funcArr.length; i++)
window[funcArr[i]]();
编辑:如果您不想要功能,但需要随机排序代码行,那么它就无法运行。 JavaScript没有goto
命令(至少没有外部API),因此您无法在代码行之间跳转。您只能混合功能,如上所示。
答案 1 :(得分:1)
有很多方法可以做到这一点,其中一种最简单的方法就是这样:
Array.prototype.shuffle = function () {
this.sort(function() { return 0.5 - Math.random() });
}
[func1, func2, func3].shuffle().forEach(function(func, index, array){
func();
});
答案 2 :(得分:1)
您可以使用类似Fisher-Yates shuffle之类的内容来重排函数,然后通过Array.prototype.forEach()
调用它们:
var a = function () { alert('a'); },
b = function () { alert('b'); },
c = function () { alert('c'); },
array = [a, b, c];
array = array.map(function (a, i, o) {
var j = (Math.random() * (o.length - i) | 0) + i,
t = o[j];
o[j] = a;
return t;
});
array.forEach(function (a) { a(); });