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

Posted

技术标签:

【中文标题】在 jquery 中随机化测验/抽认卡的顺序【英文标题】:Randomize order of quiz/flashcards in 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 这就是问题所在。所以希望能得到你的帮助。

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

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

【问题讨论】:

你能做个小提琴吗? jsfiddle.net/oL978pfa 不能给你 html 代码,因为它安装在 joomla 中,但这里有一个链接 kanjilearn.net/index.php/n5 您可以向H5P.Flashcards 添加功能请求。我们中可能会有更多人想要这个功能。 【参考方案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);

【讨论】:

感谢您的详细回答,但编写代码来选择随机元素不是问题。可能我解释的不是很好。问题是我不知道在代码中“安装”随机选择器的位置。 可能是我太懒了,只看关键词。但我会将选择下一个项目和随机化问题顺序的担忧分开。所以我会在代码中找到一个更早的地方来进行随机化。您不必修改您无法控制的代码。

以上是关于在 jquery 中随机化测验/抽认卡的顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用相同的随机排序对两个数组进行排序

随机化弹性盒顺序

在“抽认卡”中显示来自 iOS 中 Firebase 的数据

jquery将元素移动到随机顺序

我可以随机化 MultipleChoiceItem 中的项目吗?

通过 Access 数据库随机化 RadioButtons 中的答案