2013-05-09 3 views
0

아래의 함수 load_table()을 사용하여 Google 문서 스프레드 시트의 콘텐츠를 해시 변수 tbl에로드하고 있습니다. 도우미 함수 test_hash()을 사용하면 tblbt, codst과 함께 load_table() 내에 표시되며 스프레드 시트 (cod은 상수 임)의 데이터도 포함되어 있습니다. 모든 것이 예상대로입니다.Google Apps 스크립트 : 여러 객체 반환

다른 해시 변수 res에 넣어 이러한 변수를 모두 반환하려고하면 tbl이 느슨해집니다. 어떤 이유로 인해 tbl은 공백이며 다른 변수는 예상대로 존재합니다. 왜 이런 일이 일어나는 지 아십니까? 감사.

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

이 대응 doGet() 함수 :

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

답변

1

Objects are Maps, Arrays are ListsThe Associative Array에서 설명한 바와 같이, 문제는 tbl는 실제로 있다는 연관 배열 일명 map (Object)하지만 목록 (Array)으로 선언했습니다.

var tbl = {}; 

Screen Shot - debugger

PS :

라인 8이 작은 변화는 tblreturn 살아남을 수 당신이 라인을 11 일부터 시작하셨습니까? for (var i = 1; ... 배열은 0에서 시작합니다.

+0

Thanks Mogsdad !!! 예, 스프레드 시트의 헤더를 건너 뜁니다. – user2105469

관련 문제