对表单项的选择进行排序

时间:2015-03-15 02:32:34

标签: google-apps-script google-form

我有一个脚本,可以在提交时为表单问题添加选项。添加后,它会显示在底部。如何对选择列表进行排序?

2 个答案:

答案 0 :(得分:2)

使用getChoices*)检索已有的所有现有选项的数组,推送此数组中的new choicesort此数组,最后添加使用setChoices([])**)的已排序数组。

根据你的评论,我走得更深,找到了一种可行的方法。下面是一个演示测试代码,我在其中添加一个项目到列表并按字母顺序对项目进行排序。 在这个例子中,列表问题是第四个问题,请适应您的情况。 (代码中的注释,一步一步)

function sortList(){
  var f = FormApp.getActiveForm();
  var list = f.getItems()[3]; // this was my test form configuration
  var choices = list.asListItem().getChoices();
  var newChoice = list.asListItem().createChoice('0000 option');// an example that should come first in the list of choices
  var sortedChoices = [];
  sortedChoices.push([newChoice.getValue(),newChoice]);// add to the array, order doesn't matter
  for(var n in choices){
    Logger.log(choices[n].getValue());
    sortedChoices.push([choices[n].getValue(),choices[n]]);// add all existing items    
  }
  Logger.log(JSON.stringify(sortedChoices));// see the unsorted content
  sortedChoices.sort(function(x,y){
  var xp = x[0];
  var yp = y[0];
  return xp == yp ? 0 : xp > yp ? 1 : -1;//  sort on choice value only
});
  var resultChoices = [];
  for(var n in sortedChoices){
    resultChoices.push(sortedChoices[n][1]);// create a new array with only useful objects    
  }  
  Logger.log(JSON.stringify(resultChoices));// check in logger
  list.asListItem().setChoices(resultChoices);// update the form
}

答案 1 :(得分:1)

稍微修改Serge发布的代码,以简化和修复sort函数,允许按值直接排序选择数组,而无需创建值数组,排序和重新创建排序数组。这也保留了导航数据。

function sortList(){
  var f = FormApp.getActiveForm();
  var list = f.getItems()[3]; // this was my test form configuration
  var choices = list.asListItem().getChoices();
  var newChoice = list.asListItem().createChoice('0000 option');// an example that should come first in the list of choices
  choices.push(newChoice);

  choices.sort(function(x,y){
    var xp = x.getValue();
    var yp = y.getValue();
  return xp == yp ? 0 : xp > yp ? 1 : -1;//  sort on choice value only
});

  list.asListItem().setChoices(choices);// update the form
}