如何正确迭代这个二维javascript数组?

时间:2014-03-27 01:23:45

标签: javascript google-apps-script

我有一张这样的表:

enter image description here

我有这个功能:

    function getRangeAsArrays(sheet) {
  var dataRange = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn());
  var data = dataRange.getValues();
  var array = [];  
  for (var r=0; r<sheet.getLastColumn(); r++) {
  for (i in data) {
    var row = data[i];
    array.push(row);
       }
    }
  return array;
}

我用这种方式构建listbox

   var recipientArray = getRangeAsArrays(activeSheet);
  var item3Panel = app.createHorizontalPanel();
  item3Panel.add(app.createLabel("recipient"));
  var listBox = app.createListBox().setName('item3');  
  for(var i = 0; i < (recipientArray.length); i++){
  Logger.log("recipientArray[i][2] = " + recipientArray[i][3]);
  Logger.log(" i = " + i);
      listBox.addItem(recipientArray[i][4]);
    }
  item3Panel.add(listBox);

但是当我遍历数组长度(4行)时,我得到了这个(对我来说意外)结果,日志显示i变量一直持续到14

enter image description here

因为recipientArray.length应该给我二维数组的第一个维度,recipientArray[i].length第二个维度,因为我想要第一个维度(行数)行来修复它?这里出了什么问题?

1 个答案:

答案 0 :(得分:1)

即使我仍然不确定我理解你需要什么(我想我有点累或者我变得愚蠢......去图...... :),我想知道你为什么尝试单独使用函数,因为range.getValues()返回的值已经是一个数组......一个二维数组,但仍然是一个数组。

如果你想每行创建一个listBox并将以下单元格添加为项目,那么像这样的双循环将完成这项工作。 (告诉我,如果我完全不在这个问题上,那么)。

我写了一个带有主要结构和注释的示例代码来解释事情的进展。

function test() {
  var dataRange = SpreadsheetApp.getActiveSheet().getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn());
  var data = dataRange.getValues();
  Logger.log(data)
  var array = [];  // this is useless
  for (var r=0; r<data.length; r++) {

    // create listBox widget here
    //var listBox = app.createListBox().setName('listBox'+r);   
    for (i in data[0]) {
      var cell = data[r][i];

      //add items to listBox here
      // listBox.addItem(cell);
      array.push(cell);// this is useless
    }
  }
  Logger.log(array);//useless
  return array;//useless
}