【问题标题】:Randomize order of quiz/flashcards in jquery在 jquery 中随机化测验/抽认卡的顺序
【发布时间】:2014-10-07 21:09:43
【问题描述】:

我有以下问题 我有一个抽认卡测验的代码,但我需要它来洗牌。 我认为最好的解决方案是在下一个按钮功能中进行更改。 函数代码如下:

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 这就是问题所在。所以希望能得到你的帮助。

如果我写了代码,我可以自己做,但这样我就不会感到不安。我也联系了代码的所有者,但代码很旧,他没有回答,我想他不再活跃了。

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

【问题讨论】:

标签: jquery random next


【解决方案1】:

使用您的随机函数生成排列而不是选择随机元素。

在所有元素的 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);

【讨论】:

  • 感谢您的详细回答,但编写代码来选择随机元素不是问题。可能我解释的不是很好。问题是我不知道在代码中“安装”随机选择器的位置。
  • 可能是我太懒了,只看关键词。但我会将选择下一个项目和随机化问题顺序的担忧分开。所以我会在代码中找到一个更早的地方来进行随机化。您不必修改您无法控制的代码。
猜你喜欢
  • 2015-11-22
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多