在jquery中随机化测验/抽认卡的顺序

时间:2014-10-07 21:09:44

标签: jquery random next

我有以下问题 我有一个闪卡测验的代码,但我需要它洗牌顺序。 我认为最好的解决方案是在下一个按钮功能中改变一些东西。 这是函数的代码:

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。所以希望得到你的帮助。

如果我已经编写了代码,我可以自己这样做,但这种方式我并没有太多关注。我也联系了代码的所有者,但代码很旧,他没有回答,我想他已经不再活跃了。

如果在下一个按钮功能中不可行,我可以发布完整的代码。 提前致谢。 抱歉我的英语不好。

1 个答案:

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