javascript - 将 JSON 问题库中的问题子集随机添加到调查 JS 测验
问题描述
我正在使用调查 js 库创建测验。对于这个测验,我有一堆问题,我想从中随机选择。
为此,我存储了 JSON 对象 - 序列化为 JSON 问题。这是工作示例 - https://plnkr.co/edit/gnL4gv75uowDPyEU
现在,这适用于通过利用 foreach 循环将每个问题添加到页面。相反,我想随机添加 4 个问题中的 2 个。
从概念上讲,我理解如何做到这一点,但我对编程比较陌生。
以下是我对需要做的事情的思考过程:
- 使用 Fisher-Yates shuffle 获取随机数:
function shuffle(array) {
var i = array.length,
j = 0,
temp;
while (i--) {
j = Math.floor(Math.random() * (i+1));
// swap randomly chosen element with current element
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
var ranNums = shuffle([1,2,3,4]);
- 将序列化随机数处的 JSON 问题添加到页面。重复两次以添加两个问题。
这看起来相对简单,但是当我去实现它时,我似乎无法弄清楚如何实际序列化 json。此外,即使我弄清楚如何序列化 json 问题并相应地选择它,我也不明白添加问题的必要语法。有人可以帮忙吗?
解决方案
您可以存储 JSON 对象 - 序列化为 JSON 问题。这些对象可以存储为 DB 中的 JSON 或序列化的 JSON 字符串。您可以使用该函数从字符串反序列化 JSON 对象JSON.parse
,并将反序列化的对象添加到具有潜在问题的数组 - questionJSONs。之后,您可以将此数组中的问题添加到您的调查中。这是工作示例 - https://plnkr.co/edit/gnL4gv75uowDPyEU
var questionJSONs = [
{
name: "name",
type: "text",
title: "Please enter your name:",
placeHolder: "Jon Snow",
isRequired: true
}, {
name: "birthdate",
type: "text",
inputType: "date",
title: "Your birthdate:",
isRequired: true
}, {
name: "color",
type: "text",
inputType: "color",
title: "Your favorite color:"
}, {
name: "email",
type: "text",
inputType: "email",
title: "Your e-mail:",
placeHolder: "jon.snow@nightwatch.org",
isRequired: true,
validators: [
{
type: "email"
}
]
}
];
var json = {
pages: [{name: "page1"}]
};
window.survey = new Survey.Model(json);
var page = survey.pages[0];
questionJSONs.forEach(function(questionJson) {
var question = page.addNewQuestion(questionJson.type, questionJson.name);
question.fromJSON(questionJson);
});
推荐阅读
- c++ - 获取指定时区的日期和时间
- sql - 从逗号分隔的字符串中提取单词到单独的行
- c - 使用内置函数进行奇怪的 GCC6 优化
- python - 覆盖 list() 方法时,Django Rest Framework ViewSet 丢失分页、SearchFilter 和 OrderingFilter
- sql-server - 将列 Ageday 转换为空白值而不是零
- jquery - 从 jquery 绑定图像 src
- c++ - 关于链接的错误,但我已经链接了那个库
- android - Android Room - 如何在每个应用程序运行时重置自动生成的表主键
- linux - 如何在不更改 cd 的情况下更改 tcsh 中的目录 -
- java - 如何在java中制作动态嵌套for循环?