如何在Javascript中调用一次随机函数?

时间:2017-02-24 03:46:40

标签: javascript

我有3个函数,我想能够随机运行它们而不使用两次以上。这是我快速整理的一些代码:

    function func1() {
        alert("1");
    }

    function func2() {
        alert("2");
    }

    function func3() {
        alert("3");
    }

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()