我有一个脚本,可以在提交时为表单问题添加选项。添加后,它会显示在底部。如何对选择列表进行排序?
答案 0 :(得分:2)
使用getChoices
(*)检索已有的所有现有选项的数组,推送此数组中的new choice,sort此数组,最后添加使用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
}