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

时间:2013-05-09 20:43:27

标签: javascript google-apps-script

使用下面的load_table()功能,我将Google doc电子表格的内容加载到哈希变量tbl中。使用辅助函数test_hash()我可以看到tbl中的load_table()以及btcodst也包含数据来自电子表格(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;
 }

test_hash()是一个简单的调试功能:

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

这是相应的doGet()函数:

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

}

1 个答案:

答案 0 :(得分:1)

Objects are Maps, Arrays are ListsThe Associative Array中所述,问题是tbl实际上是关联数组,也就是map(Object),但您已将其声明为列表(Array)。

第8行中的这一小变化让tbl能够在return

中存活
var tbl = {};

Screen Shot - debugger

PS:你的意思是从第11行的1开始? for (var i = 1; ...数组从0开始。