我已编写以下代码来实现自定义Google电子表格功能;目标是在名称列在'名称'之间的团队之间编写所有可能的游戏。参数:
function ALLGAMES( names )
{
var nbTeams = names.length;
var gameList = [];
for( var t1=0; t1<nbTeams-1; t1++ ) {
for( var t2=t1+1; t2<nbTeams; t2++ ) {
gameList.push( [ new String(names[t1]), new String(names[t2]) ] );
//A. gameList.push( [ t1, t2 ] );
}
}
// B. return JSON.stringify(gameList)
// C. return [[ 'a', 'b' ], ['c', 'd']]; //using the value returned by JSON.stringify
return gameList;
}
当我在电子表格中使用该功能时,它会使用空白值填充单元格,而不是团队名称。
但是,在以下任何情况下,行为均符合预期:
问题出在哪里?
修改1:
答案 0 :(得分:2)
ALLGAMES函数将从您的选择中接收二维数组。您应该首先将其映射到一维数组中。 在循环中你应该省去新的String(..)。在javascript中,您几乎从不使用此表示法,请参阅this discussion
function ALLGAMES( names )
{
names = names.map(function(item) { return item[0]; }); // adjusted
var nbTeams = names.length;
var gameList = [];
for( var t1=0; t1<nbTeams-1; t1++ ) {
for( var t2=t1+1; t2<nbTeams; t2++ ) {
gameList.push( [ names[t1], names[t2] ] ); // adjusted
}
}
return gameList;
}
答案 1 :(得分:1)
替换
gameList.push( [ new String(names[t1]), new String(names[t2]) ] );
通过
gameList.push( [names[t1][0], names[t2][0]])
作为自定义函数的参数传递的范围引用被解析为2D数组,因此可以使用类似reference [i] [j]的代替引用[i]。另一方面,new String(string)
返回一个对象,但自定义函数应返回值,否则Google表格无法正确显示结果。