Генерация случайного числа, которое не будет повторяться между опросами в Qualtrics с использованием javascript

Отказ от ответственности: я не знаком с Javascript. Я просто собрал базовое понимание того, что мне нужно сделать для этой задачи, из Stack Overflow и других ресурсов. Мои извинения, если что-то ниже неясно.

Моя проблема: мне нужно сгенерировать случайное число от 0 до 8764, используя Javascript, которое не будет повторяться между ответами на опросы Qualtrics.

В настоящее время я нашел код для создания массива, который содержит все числа от 0 до 8764, перемешивает массив и извлекает последнее число из конца массива. Затем он добавляет встроенные данные в Qualtrics с этим всплывающим номером, и затем я могу передать встроенные данные в вопрос Qualtrics, чтобы отобразить их респонденту моего опроса. Смотри ниже:

Qualtrics.SurveyEngine.addOnReady(function()
{

for (var i = 0, ar = []; i < 8; i++) {
ar[i] = i;
}

ar.sort(function () {
  return Math.random() - 0.5;
});

var randomnumber = ar.pop();

Qualtrics.SurveyEngine.addEmbeddedData("randomnumber", randomnumber);

});

Однако, насколько я могу судить, этот код Javascript «сбрасывает» себя между ответами на опрос, то есть он будет воссоздавать и перетасовывать массив каждый раз, когда новый респондент входит в опрос. Я хотел бы найти способ сделать так, чтобы новый респондент не мог видеть то же всплывающее «случайное число», что и предыдущий респондент. Таким образом, если первый респондент увидел 1, то следующий респондент может увидеть любое число, кроме 1 (скажем, вместо этого он увидит 100), а следующий респондент может увидеть любое число, кроме 1 или 100, и т. д. и т. д. .

Я думаю, что можно использовать встроенные данные в коде Javascript и манипулировать ими (см. здесь). Похоже, что может быть способ получить доступ к встроенным данным randomnumber и написать код Javascript, чтобы не удалять любые числа из массива, которые соответствуют одному из ранее извлеченных randomnumbers. Мне не хватает технических знаний, чтобы выполнить это, даже если это лучший способ выполнить задачу.

Любая помощь приветствуется!


person melimoo    schedule 15.12.2017    source источник
comment
Для этого вам нужен сервер приложений. Есть ли он у вас, и если да, то какой язык программирования вы для него используете (PHP? nodejs? Java?...)   -  person trincot    schedule 15.12.2017
comment
К сожалению, я не программист и не знаю, что такое сервер приложений, поэтому предполагаю, что у меня его нет. Чтобы было ясно, вы имеете в виду, что нет способа сделать это с помощью функций Qualtrics/Javascript, которые у меня есть до сих пор?   -  person melimoo    schedule 16.12.2017
comment
Я не знаю Qualtrics, но это серверная служба, поэтому вам нужно будет использовать предлагаемые ею функции. Вы не можете использовать JavaScript для поддержания состояния между сеансами. Информацией всего приложения, например, какие случайные числа были сгенерированы, необходимо управлять на сервере. JavaScript работает на компьютере пользователя, а не на сервере. Если у Qualtrics нет функции для хранения такой пользовательской информации, вы мало что можете сделать. На первый взгляд, в документации не упоминается ни о какой такой функции.   -  person trincot    schedule 16.12.2017


Ответы (1)


Вы можете делать все, что хотите, с расширенной рандомизацией в Qualtrics.

Задайте вопрос с несколькими вариантами ответов, используя числа от 0 до 8764 в качестве вариантов ответа. Затем используйте Advanced Randomization, чтобы выбрать случайное подмножество 1 из всех чисел и нажмите «Evenly Present» (Evenly Present — это то, что говорит Qualtrics использовать каждое число перед повторным использованием любого). Используйте JavaScript, чтобы скрыть вопрос с множественным выбором:

$(this.questionId).hide();

Теперь вы можете передать свое уникальное случайное число в последующий вопрос. Например:

${q://QID1/ChoiceGroup/DisplayedChoices}
person T. Gibbons    schedule 16.12.2017
comment
Это отлично. Я не знал, что в Qualtrics можно рандомизировать выбор — мне следовало подумать об этом. Большое спасибо! - person melimoo; 17.12.2017