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()
函数会很有帮助。如果您更愿意提供一个公共表,那就太好了。但是在当前状态下,这个本来写得很好的问题会变成很多工作。