首页 > 解决方案 > 创建一个数组,在 Google 表单的 setchoices 中将答案选项分配为 true 或 false

问题描述

我想就我遇到的问题提出一些建议。我想做一个在谷歌表格中设置的自我评分多项选择测验。我希望一些问题有多个答案,因此我需要做出一系列选择,根据它是否出现在答案数组中,将每个答案分配为真或假。但是,使用我目前拥有的代码,答案在 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 表单上的输出:

谷歌表单输出作为代码代表

这是谷歌表

标签: google-apps-scriptgoogle-forms

解决方案


问题:

  • 不必要的循环嵌套。对于i外循环中的每个,内循环将运行到完成k

解决方案:

  • 用于indexOf检查内部answers数组而不是再次循环

片段:

if (answers.indexOf(slicedData[i]) !== -1) {//k loop removed
    choices.push(item.createChoice(slicedData[i],true))
}

推荐阅读