创建一个数组,在 Google 表单的 setchoices 中将答案选项指定为 true 或 false
Creating an array which assigns answers options as either true or false in setchoices for Google forms
我想就我遇到的问题寻求一些建议。我想在 Google Sheet 中进行自我评分的多项选择测验。我希望有些问题有多个答案,因此我需要做出一系列选择,根据每个答案是否出现在答案数组中,将每个答案分配为真或假。但是,使用我目前拥有的代码,答案在 Google 表单测验中正确显示为正确,但每个问题的所有答案都重复 4 次,这意味着我的 for 循环不正确,但我不能,为了我的生命,看看我犯了什么错误。任何帮助都会很棒,谢谢!
//make Multiple-Choice question
function makeMultipleQ(data) { //data- a row of spreadsheet dataRange
var question = data[2]
var questionNumber = data[0]
var answer = data[9]
var item = form.addMultipleChoiceItem(); //form to add choice
item.setTitle(questionNumber + '. ' + question)
var trimmedData = data.filter(function(str) {
return /\S/.test(str)
})
var slicedData = [1,2,3,4]
var answers = [1,2,6,7,8,9]
var choices = []; //array of choices
for (var i = 0; i < slicedData.length; i++) {
for (var k = 0; k < answers.length; k++){
if (slicedData[i] == answers[k]) {
choices.push(item.createChoice(answers[k],true))
}
else {
choices.push(item.createChoice(slicedData[i],false)); //wrong answer pushed to choices
}
}
}
Logger.log(choices)
item.setChoices(choices); //set the choices array to this itemQ
}
这是 Google 表格的输出:
问题:
- 不必要的循环嵌套。对于外循环中的每个
i
,内循环将 运行 完成每个 k
.
解决方案:
- 使用
indexOf
检查内部answers
数组而不是再次循环
片段:
if (answers.indexOf(slicedData[i]) !== -1) {//k loop removed
choices.push(item.createChoice(slicedData[i],true))
}
我想就我遇到的问题寻求一些建议。我想在 Google Sheet 中进行自我评分的多项选择测验。我希望有些问题有多个答案,因此我需要做出一系列选择,根据每个答案是否出现在答案数组中,将每个答案分配为真或假。但是,使用我目前拥有的代码,答案在 Google 表单测验中正确显示为正确,但每个问题的所有答案都重复 4 次,这意味着我的 for 循环不正确,但我不能,为了我的生命,看看我犯了什么错误。任何帮助都会很棒,谢谢!
//make Multiple-Choice question
function makeMultipleQ(data) { //data- a row of spreadsheet dataRange
var question = data[2]
var questionNumber = data[0]
var answer = data[9]
var item = form.addMultipleChoiceItem(); //form to add choice
item.setTitle(questionNumber + '. ' + question)
var trimmedData = data.filter(function(str) {
return /\S/.test(str)
})
var slicedData = [1,2,3,4]
var answers = [1,2,6,7,8,9]
var choices = []; //array of choices
for (var i = 0; i < slicedData.length; i++) {
for (var k = 0; k < answers.length; k++){
if (slicedData[i] == answers[k]) {
choices.push(item.createChoice(answers[k],true))
}
else {
choices.push(item.createChoice(slicedData[i],false)); //wrong answer pushed to choices
}
}
}
Logger.log(choices)
item.setChoices(choices); //set the choices array to this itemQ
}
这是 Google 表格的输出:
问题:
- 不必要的循环嵌套。对于外循环中的每个
i
,内循环将 运行 完成每个k
.
解决方案:
- 使用
indexOf
检查内部answers
数组而不是再次循环
片段:
if (answers.indexOf(slicedData[i]) !== -1) {//k loop removed
choices.push(item.createChoice(slicedData[i],true))
}