我有以下问题 我有一个闪卡测验的代码,但我需要它洗牌顺序。 我认为最好的解决方案是在下一个按钮功能中改变一些东西。 这是函数的代码:
C.prototype.next = function () {
var that = this;
var $next = this.$current.next();
if (!$next.length) {
return;
}
setTimeout(function () {
that.setCurrent($next, 'h5p-previous');
if (!that.$current.next().length) {
that.$nextButton.addClass('h5p-hidden');
}
that.$prevButton.removeClass('h5p-hidden');
that.setProgress();
}, 10);
};
所以我需要改变以随机选择下一个问题。重要的是,这样的测验有很多问题,如果再次显示问题则不是很好,所以简单的随机化不会起作用。我试图用一个数组来解决它并选择一个随机元素并在for循环中删除它,但是我不知道这个问题是jquery。所以希望得到你的帮助。
如果我已经编写了代码,我可以自己这样做,但这种方式我并没有太多关注。我也联系了代码的所有者,但代码很旧,他没有回答,我想他已经不再活跃了。
如果在下一个按钮功能中不可行,我可以发布完整的代码。 提前致谢。 抱歉我的英语不好。
答案 0 :(得分:0)
使用随机函数生成排列而不是选择随机元素。
在所有元素的for循环中,将当前元素与数组中的随机其他元素交换。 如果您只需要40个问题中的10个,那么您可以选择前10个元素。
据我所知,这与随机函数一样随机。
我的小提琴:http://jsfiddle.net/gncuvrsx/
function randomIntFromInterval(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
var things = [
"some string", [1, 2, 3], -5, {
foo: 'bar'
},
3.1415, 42];
alert(things);
var random = JSON.parse(JSON.stringify(things));
var L = random.length;
for (var i = 0; i < L; i++) {
var j = randomIntFromInterval(0, L - 1);
var b = random[j];
random[j] = random[i];
random[i] = b;
}
alert(random);