随机运行函数

时间:2016-07-28 15:22:46

标签: javascript jquery arrays

我有一个包含一些函数的数组,它看起来像这样:

var all_questions = [
    show_question(1, 1),
    show_question(2, 1),
    show_question(3, 1),
];

我想将这些函数随机运行到该数组中。我怎么能这样做?

4 个答案:

答案 0 :(得分:6)

首先,您需要将这些函数包装在匿名函数中,否则将立即调用它们。从那里你可以get a random element from the array并调用它,就像这样:

var all_questions = [
    function() { show_question(1, 1) },
    function() { show_question(2, 1) },
    function() { show_question(3, 1) },
];

all_questions[Math.floor(Math.random() * all_questions.length)]();

function show_question(a, b) {
  console.log(a, b);
}

请注意,您可以通过仅随机化函数的第一个参数来改进逻辑,而不是将函数引用存储在数组中:

function show_question(a, b) {
  console.log(a, b);
}

var rnd = Math.floor(Math.random() * 3) + 1;
show_question(rnd, 1);

答案 1 :(得分:2)

如果你用不同的参数调用相同的函数,我会说更好的选择是随机选择参数而不是函数。

var args = [
  [1,2],
  [1,3],
  [1,4],
  ...
]

// Get a random element from the array
// http://stackoverflow.com/a/4550514/558021
var randomArgs = args[ Math.floor( Math.random()*args.length) ];

show_question.apply( this, randomArgs );

这里使用apply function是因为它将参数传递给目标函数。当您使用apply执行函数时,要传递给函数的参数在数组中提供,然后在传递给目标函数时拆分为单个参数。

答案 2 :(得分:0)

类似

var all_questions = [
    function() show_question(1, 1),
    function() show_question(2, 1),
    function() show_question(3, 1),
];
var x = Math.floor((Math.random() * 3) + 1);
// do something you want
    all_questions[x];

答案 3 :(得分:0)

你可以这样做;

var allQuestions = [
                    showQuestion.bind(this, 1, 1),
                    showQuestion.bind(this, 2, 1),
                    showQuestion.bind(this, 3, 1),
                   ],
 displayQuestion = allQuestions[~~(Math.random()*allQuestions.length)];