2013-05-09 67 views
0

使用下面的函数load_table(),我将一个谷歌文档电子表格的内容加载到一个哈希变量tbl。使用帮助函数test_hash()我可以看到,tblload_table()之内,以及bt,codst之间可见,其中还包含来自电子表格的数据(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); 

} 
+0

这个问题会随着样本数据的增加而改善 - 一个带有效数据的'test()'函数的例子会有帮助。如果你更愿意提供公开表,那很好。但在目前的状态下,这个写得很好的问题变成了很多工作。 – Mogsdad 2013-05-11 14:44:05

回答

1

Objects are Maps, Arrays are ListsThe Associative Array描述的那样,问题是tbl实际上是一个是关联数组aka map(Object),但是您已将其声明为一个列表(Array)。

这行8小变化让tbl生存的return

var tbl = {}; 

Screen Shot - debugger

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

+0

谢谢Mogsdad !!!是的,我跳过电子表格的标题。 – user2105469 2013-05-12 04:15:23

相关问题