【问题标题】:How to sort two arrays with the same random sort如何使用相同的随机排序对两个数组进行排序
【发布时间】:2011-07-15 11:24:58
【问题描述】:

好的,我正在用 jQuery/javascript 构建一个测验应用程序。

以下小功能旨在随机化一个问题的一系列可能答案,以及一系列照片。每张照片对应一个答案。

在调用此函数之前,照片和答案在每个包装集中的顺序相同。

函数确实随机化这两个集合。但是每一个都是单独随机的。我需要它们都具有相同的随机化。

我不知道如何实现这一点。我认为也许能够将它们链接到 jQuery 样式,但这是不对的。我还尝试在 sort() 中分离出函数,但这也没有奏效。

谁能帮忙?

function randomize() {
    var elemsPhotos = $('.photos').children('img').get();
    var elemsQuests = $('.answers').children('.answerLine').get();
    elemsPhotos.sort(function() { return (Math.round(Math.random())-0.5); });
    elemsQuests.sort(function() { return (Math.round(Math.random())-0.5); });
    $('.photos').remove('img');
    $('.answers').remove('.answerLine');
    for (var i=0; i < elemsQuests.length; i++) {
        $('.photos').append(elemsPhotos[i]);      
        $('.answers').append(elemsQuests[i]);      
    }
}

【问题讨论】:

    标签: javascript jquery arrays sorting random


    【解决方案1】:

    如果它们以 pair 的形式出现,您可以使用 div 来保存它们并随机化 div 的顺序吗?

    否则,您可以编写一个随机发生器来生成一个序列。即1,4,2,3作为索引,然后按顺序排列照片和答案?

    元素 1->位置 1

    元素 2->位置 4

    元素 3->位置 2

    元素 4->位置 3

    【讨论】:

    • 随机化索引;聪明的主意。请记住,在通过这些索引重新映射数组时必须小心。例如。如果您天真地执行上述示例,那么您会将元素 2 重新映射到位置 3,因为元素 2 在重新映射位置之前已映射到位置 4。最简单的方法是创建一个新数组并从旧数组复制。
    • 就使用 div 而言,这对我来说并不适用,因为照片和答案都保存在彼此不同的 DIV 中。
    • 但是您关于生成另一个索引的答案似乎是正确的。我认为这是 Yanick 在下面实施的。感谢您的帮助!
    • 欢迎您。这也取决于您的布局,感谢luqui提醒。只是好奇,如果这两个元素相关,我总是尝试以某种方式(偏移量、div 等)将它们保持在一起。
    【解决方案2】:

    您为什么不直接使用n 值(其中n 是问题/照片的数量)随机化一个数组并使用该数组来获取每个问题/照片数组中的“随机”索引?

    var elemsPhotos = $('.photos').children('img').get();
    var elemsQuests = $('.answers').children('.answerLine').get();
    var n = elemsQuests.length;
    var randomIndexes = [];
    for (var i=0; i<n; i++) {
       randomIndexes[i] = i;
    }
    randomIndexes.sort(function() { return (Math.round(Math.random())-0.5); });
    
    $('.photos').remove('img');
    $('.answers').remove('.answerLine');
    for (var i=0; i < n; i++) {
        $('.photos').append(elemsPhotos[randomIndexes[i]]);      
        $('.answers').append(elemsQuests[randomIndexes[i]]);      
    }
    

    【讨论】:

    • 这成功了,除了你的 sort() 中有一个“return return”。非常感谢。
    【解决方案3】:

    您可以随机配对(照片、任务):

    var photos = $('.photos').children('img').get();
    var quests = $('.answers').children('.answerLine').get();
    
    var pairs = [];
    for (var i=0; i < quests.length; i++)
      pairs[i] = { photo: photos[i], quest: quests[i] };
    
    // randomize 'pairs' any way you like
    
    $.each(pairs, function(i, val) {
      $('.photos').append(val.photo);      
      $('.answers').append(val.quest);  
    });
    

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 2014-07-22
      • 2018-03-30
      • 2022-11-20
      • 2013-06-09
      相关资源
      最近更新 更多