JavaScript随机顺序函数

时间:2015-12-05 22:30:43

标签: javascript random

我有以下问题:

我想调用我的函数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 !!

}


在此先感谢;)

3 个答案:

答案 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(); });