2013-05-09 52 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

相關問題