簡體   English   中英

如何正確迭代這個二維javascript數組?

[英]How to properly iterate through this two dimensional javascript array?

我有一張這樣的表:

在此處輸入圖片說明

我有這個功能:

    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

在此處輸入圖片說明

由於recipientArray.length應該給我二維數組的第一個維度, recipientArray[i].length第二個維度,因為我想要第一個維度(行數)行來解決這個問題? 這里出了什么問題?

即使我仍然不確定我是否理解你需要什么(我想我有點累或者我變得愚蠢......去想...... :),我想知道你為什么嘗試使用單獨的函數,因為返回的值是range.getValues()已經是一個數組......一個二維數組但仍然是一個數組。

如果您想每行創建一個列表框並將以下單元格添加為項目,那么像這樣的雙循環就可以完成這項工作。 (告訴我我是否完全偏離主題,謝謝)。

我寫了一個帶有主要結構和注釋的示例代碼來解釋事情的發展方向。

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM