0

使用load_table()下面的函数,我将 google doc 电子表格的内容加载到 hash variabletbl中。使用辅助函数test_hash(),我可以看到它在、和tbl中可见,并且还包含电子表格中的数据(是一个常数)。一切都如预期的那样。load_table()btcodstcod

当我尝试通过将所有这些变量放入另一个哈希变量来返回所有这些变量时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 );

}
4

1 回答 1

1

Objects are Maps, Arrays are ListsThe Associative Array中所述,问题在于它tbl实际上是一个关联数组,即映射(对象),但您已将其声明为列表(数组)。

第 8 行中的这个小改动让我们可以在以下情况tbl下生存return

var tbl = {};

屏幕截图 - 调试器

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

于 2013-05-11T15:03:32.133 回答