我有一个包含一些函数的数组,它看起来像这样:
var all_questions = [
show_question(1, 1),
show_question(2, 1),
show_question(3, 1),
];
我想将这些函数随机运行到该数组中。我怎么能这样做?
答案 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)];