Javascript 谷歌应用程序脚本:返回多个对象

Javascript 谷歌应用程序脚本:返回多个对象,javascript,google-apps-script,Javascript,Google Apps Script,使用下面的函数load\u table(),我正在将google doc电子表格的内容加载到哈希变量tbl中。使用辅助函数test\u hash()我可以看到tbl在load\u table()中可见,还有bt、cod和st,它们也包含来自电子表格的数据(cod是一个常量)。一切如期而至 当我试图通过将这些变量放入另一个散列变量res来返回所有这些变量时,我松开了tbl:由于某种原因,tbl为空,而其他变量如预期的那样存在。知道为什么会这样吗?谢谢 function load_table( ss

使用下面的函数
load\u table()
,我正在将google doc电子表格的内容加载到哈希变量
tbl
中。使用辅助函数
test\u hash()
我可以看到
tbl
load\u table()
中可见,还有
bt
cod
st
,它们也包含来自电子表格的数据(
cod
是一个常量)。一切如期而至

当我试图通过将这些变量放入另一个散列变量
res
来返回所有这些变量时,我松开了
tbl
:由于某种原因,
tbl
为空,而其他变量如预期的那样存在。知道为什么会这样吗?谢谢

function load_table( ss_data , colPos ) {

  // create hash from ss_data
  // ========================

  var bt  = [];
  var st  = [];
  var tbl = [];
  var cod = '';

  for (var i = 1; i < ss_data.length; i++) {
    cod = ss_data[i][0]
    bt[ ss_data[i][1] ] = 1;
    st[ ss_data[i][2] ] = 1;
    tbl[ ss_data[i][1] + '~' + ss_data[i][2] ] = ss_data[i][colPos];
  }

  test_hash(tbl);

  var btLvls = Object.keys(bt).sort();
  var stLvls = Object.keys(st).sort();

  var res = {};
  res['cod'] = cod;
  res['bt'] = btLvls;
  res['st'] = stLvls;
  res['tbl'] = tbl;

  test_hash(tbl);
  test_hash(res);

  return res;
 }
这是相应的
doGet()
函数:

 function test_hash( h ) {
  Logger.log( " --------- HASH START -------- " );
  for ( var index in h ){
     Logger.log( index + ':' +  h[index] )
  }
  Logger.log( " --------- HASH END -------- " );
 }
function doGet(){
  // counts by yearmo

  var liveid = 'xxxxx'
  var testid = 'yyyyy'

  var ss = SpreadsheetApp.openById( testid );

  var data = ss.getDataRange().getValues();

  var rencat_nbtids = load_table( data , 3 );
  var rencat_nstids = load_table( data , 4 );
  var rencat_nsubs  = load_table( data , 5 );

  Logger.log( rencat_nbtids );

}
如和中所述,问题在于
tbl
实际上是一个关联数组,也称为映射(对象),但您已将其声明为列表(数组)

第8行中的这一小改动使
tbl
返回后仍然有效:

var tbl = {};


附言:你的意思是从第11行的1开始吗<代码>for(var i=1;…
数组从0开始。

这个问题将通过添加示例数据得到改进-一个带有有效屏蔽数据的示例
test()
函数会很有帮助。如果您更愿意提供一个公共表,那就太好了。但是在当前状态下,这个本来写得很好的问题会变成很多工作。