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

Javascript 如何使用相同的随机排序对两个数组进行排序,javascript,jquery,arrays,sorting,random,Javascript,Jquery,Arrays,Sorting,Random,好的,我正在用jQuery/javascript构建一个测验应用程序 下面的小功能旨在随机选择一个问题的一系列可能答案以及一系列照片。每张照片对应一个答案 在调用此函数之前,照片和答案在每个包装的集合中的顺序是相同的 该函数将两个集合随机化。但每一个都是随机分开的。我需要他们有相同的随机化 我想不出如何才能做到这一点。我想也许可以用jQuery风格来链接它们,但那是不对的。我还尝试在sort()中分离函数,但这也没有奏效 有人能帮忙吗 function randomize() { var

好的,我正在用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]);      
    }
}
函数随机化(){
var elemsPhotos=$('.photos').children('img').get();
var elemsQuests=$('.answers').children('.answerLine').get();
sort(函数(){return(Math.round(Math.random())-0.5);});
elemsQuests.sort(函数(){return(Math.round(Math.random())-0.5);});
$('.photos')。删除('img');
$('.answers')。删除('.answerLine');
对于(变量i=0;i
如果它们以对的形式出现,您是否可以使用div来保存它们,并随机排列div的顺序

否则,您可以编写随机化器来生成序列。i、 e.1,4,2,3作为索引,然后按顺序排列照片和答案

元素1->位置1

元素2->位置4

元素3->位置2


element 4->position 3

为什么不将一个数组随机化为
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]]);      
}
var elemsPhotos=$('.photos').children('img').get();
var elemsQuests=$('.answers').children('.answerLine').get();
var n=elemsQuests.length;
var指数=[];

对于(var i=0;i,您可以随机选择(照片、任务)对:

var photos=$('.photos').children('img').get();
var quests=$('.answers').children('.answerLine').get();
var对=[];
对于(变量i=0;i
随机化索引;好主意。请记住,通过这些索引重新映射数组时必须小心。例如,如果您天真地执行上述示例,那么您将重新映射元素2到位置3,因为元素2在重新映射位置之前已映射到位置4。最简单的方法是创建一个新数组并复制从旧版开始。就使用div而言,这对我来说不太管用,因为照片和答案是分开保存的。但是你关于生成另一个索引的答案似乎很正确。我认为这是Yanick在下面实现的。谢谢你的帮助!欢迎你。这也取决于你的布局,谢谢luqui的帮助inding.只是好奇,如果这两个元素是相关的,我总是试图以某种方式将它们保持在一起(offset,div等)。这成功了,除了排序()中有一个“return”(返回)。非常感谢。
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);  
});