创建一个数组,在 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))
}