javascript - 为什么这个自定义 Google 电子表格功能不起作用?

标签 javascript google-apps-script google-sheets

我编写了以下代码来实现自定义 Google 电子表格函数;目标是编写“names”参数中列出的球队之间所有可能的比赛:

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;
}

当我在电子表格中使用该函数时,它会用空白值填充单元格,而不是团队名称。

但是,在以下任何情况下,行为都会符合预期:

  • 如果我使用 A. 行(推送数字而不是字符串),它会正确显示所有数字
  • 如果我使用 B. 行(返回数组的 JSON 字符串),它会显示正确的 JSON 字符串
  • 如果我使用 C. 行(完整返回数组),它会按预期工作。

问题出在哪里?

编辑 1:

这是我为测试该功能而对 ALLGAMES 进行的调用: Google Spreadsheet call to custom function ALLGAMES

最佳答案

ALLGAMES 函数将从您的选择中接收一个二维数组。您应该首先将其映射到一维数组。 在循环中,您应该省略 new 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;
}

关于javascript - 为什么这个自定义 Google 电子表格功能不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39350544/

相关文章:

javascript - 删除 'complicated' 重复项

javascript - knockout 绑定(bind)错误

javascript - 在 JavaScript 中对集合中的某些键执行转换

javascript - 如何通过使用 PHP、javascript 和 html 单击从数据库检索的数据来编辑每行属性

javascript - requestAnimationFrame 在被函数调用之前运行

google-apps-script - 在 Apps 脚本中解压缩 Blob 时出现“无效参数”错误

google-apps-script - 安全 getElementById 或尝试确定 GUI 中是否存在 ID

javascript - 从串联函数谷歌脚本中删除不需要的分隔符

javascript - 使用 Google 脚本从 Google 存储下载文件

google-apps-script - 具有超时保护的循环仅运行一次 "as it should"