"练习"在标题中提到问题,但StackOverflow不允许单词"问题"在标题中。
我首先要说的是,在谈到Javascript时,我是一个非常新手。我试图做的是使用JSON构建一个问题库,格式如下:
{"questionlist":[
{
"question":"Test question 1",
"option1":"Answer1A",
"option2":"Answer1B",
"option3":"Answer1C"
},
{
"question":"Test question 2",
"option1":"Answer2A",
"option2":"Answer2B",
"option3":"Answer2C"
},
{
"question":"Test question 3",
"option1":"Answer3A",
"option2":"Answer3B",
"option3":"Answer3C"
}
]
}
等等。我当时想要做的是创建一个页面,使用Javascript,从前面提到的问题库中随机选择10个问题(让我们说问题库总共包含大约100个问题)并显示这10个问题。与现实生活测验一样的方式(即一次不是一个,而是所有这些)。然后只需要单选按钮来选择正确的答案,最后有一个"提交"检查答案的按钮。
谷歌这个东西真是太可怕了 - 我大多数时候都会遇到关于javascript和JSON的测验或者答案顺序随机化的设计(不是问题本身)。再次,抱歉我的词汇不能过于技术化。我希望有人可以提供帮助,即使是基本的设计 - 它将用于约3人的个人使用,因此不必进行完美优化。答案 0 :(得分:1)
随机对数组进行排序,从中获取n个项目也可以解决问题:
yourArrayOfItems.sort(() => Math.random() - 0.5).slice(0, 10);
// ^ random sort method ^ take 10 items
答案 1 :(得分:0)
请试试这个,其中'n'是你想要的随机元素的数量,
@app.route("/getfile", methods=["POST"])
def getfile():
file_name = request.form["file_name"]
with open(file_name, 'r') as f:
file_content = f.read()
return file_content
答案 2 :(得分:0)
你有100个问题的数组。您希望从第一个数组中选择另外10个问题的数组,因此在结果数组中没有重复的问题。
你应该在数组范围内选择一个随机索引10次,每次检查你是否已经选择了那个索引(换句话说,避免重复)。
我想你将这个对象存储在一些变量中。如果您将输入作为有效JSON的字符串,则可以使用JSON.parse()
。
var obj = {"questionlist":[..., ..., ...]}
首先,我们通过questionList
键获取所有问题的数组。
var list = obj.questionlist;
现在让我们创建一个数组来包含10个问题。
var resultList;
我们将通过推送10次随机索引(>=0
和<list.length
来填充它,并且每次推送时都不要忘记确保它是唯一索引。< / p>
首先让我们决定如何选择一个随机索引。
执行Math.random()
可以接收[0,1]内的随机浮点数。现在要将数字设为0 ... list.length
,我们只需乘以list.length
。不要忘记它可能是一个浮点数,所以通过丢弃浮点后的部分(即,将数字置于地板上)使其成为整数。
得到的公式为~~(Math.random()*list.length)
,
现在让我们编写所有代码。
for( var k = 0; k < 10; k++ ) {
var randIndex = ~~(Math.random()*list.length);
//check if the index is not duplicate
if( resultList.indexOf(randIndex) < 0)
resultList.push(randIndex);
else
// else the index is duplicate so we don't need it and should move one step back in the loop
k--;
}
现在resultList
包含10个随机非重复问题索引。您现在可以通过循环resultList
数组输出10个随机问题的结果列表。
for( var k = 0; k < resultList.length; k++ )
console.log(list[resultList[k]]);
答案 3 :(得分:0)
此函数随机选择数组中的N个问题:
var bank = {
"questionlist": [{
"question": "Test question 1",
"option1": "Answer1A",
"option2": "Answer1B",
"option3": "Answer1C"
},
{
"question": "Test question 2",
"option1": "Answer2A",
"option2": "Answer2B",
"option3": "Answer2C"
},
{
"question": "Test question 3",
"option1": "Answer3A",
"option2": "Answer3B",
"option3": "Answer3C"
}
]
}
function selectN(bank, n) {
var list = bank.questionlist;
if (list.length < n) n = list.length; //to prevent endless loop
var set = new Set(); //using a set to prevent duplication
while (set.size < n) set.add(list[Math.floor(Math.random() * list.length)]);
return Array.from(set)
}
console.log(selectN(bank, 2));
&#13;
答案 4 :(得分:0)
你可以这样做。
Math.random()
是一个函数,它给出一个0到1之间的浮点数。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
Math.floor()
取一个浮点数,并将其四舍五入为下一个完整整数。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
var list = {"questionlist":[
{
"question":"Test question 1",
"option1":"Answer1A",
"option2":"Answer1B",
"option3":"Answer1C"
},
{
"question":"Test question 2",
"option1":"Answer2A",
"option2":"Answer2B",
"option3":"Answer2C"
},
{
"question":"Test question 3",
"option1":"Answer3A",
"option2":"Answer3B",
"option3":"Answer3C"
}
]
}
list = list.questionlist
console.log(
list[Math.floor(Math.random() * list.length)]['question']
);
&#13;