Как отсортировать два массива с одинаковой случайной сортировкой - PullRequest
4 голосов
/ 15 марта 2011

Хорошо, я создаю приложение для викторины в 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]);      
    }
}

Ответы [ 3 ]

5 голосов
/ 15 марта 2011

Если они входят как пара , не могли бы вы использовать div , чтобы удержать их обоих и вместо этого рандомизировать порядок деления?

в противном случае выМожно написать рандомизатор для генерации последовательности.т.е. 1,4,2,3 в качестве индексов, а затем расставить фотографии и ответы в таком порядке?

элемент 1-> позиция 1

элемент 2-> позиция 4

элемент 3-> позиция 2

элемент 4-> позиция 3

4 голосов
/ 15 марта 2011

Почему бы вам просто не рандомизировать массив со значениями 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]]);      
}
0 голосов
/ 15 марта 2011

Вы можете рандомизировать пары (фото, квест):

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);  
});
...