0

以下の関数を使用してload_table()、Google ドキュメント スプレッドシートのコンテンツをハッシュ変数に読み込みますtbl。ヘルパー関数を使用すると、が とともに内に表示され、スプレッドシートからのデータも含まれていることがわかります (test_hash()は定数です)。すべてが期待どおりです。tblload_table()btcodstcod

これらすべての変数を別のハッシュ変数に入れて返そうとすると、他の変数が期待どおりにあるのに、何らかの理由で空白になりresますtbltblなぜこれが起こっているのですか?ありがとう。

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

}
4

1 に答える 1

1

Objects are Maps, Arrays are ListsおよびThe Associative Arrayで説明されているように、問題は、tbl実際にはマップ (オブジェクト) とも呼ばれる連想配列ですが、リスト (配列) として宣言していることです。

8行目のこの小さな変更により、次tblのことを乗り切ることができますreturn

var tbl = {};

スクリーンショット - デバッガー

PS: 11 行目で 1 から始めるということでしたか? for (var i = 1; ... 配列は 0 から始まります。

于 2013-05-11T15:03:32.133 に答える