簡體   English   中英

當未定義二維數組單元格時循環不會停止(javascript)

[英]While loop not stopping when 2D array cell isn't defined (javascript)

目標:遍歷二維數組的列(來自列長度不均勻的 Excel 文件)並將存在的條目放入它們自己的數組中。

我做了什么:最長的列的長度是 90 個條目,這是 Excel 文件中的第二列,最短的列的長度是 30,這是第一列。 我設置了一個for循環來遍歷每一列和一個while循環來遍歷每個存在的條目並將其附加到一個新數組中。

原始(ish)代碼:

    //read in Excel file into 2D array called "myExcel"

    var columnNames = ["shortest", "longest", "irrelevant"];

    shortArray = [];
    longArray = [];
    irrArray = [];
    var s

    for (var i = 0; i < columnNames.length; i++) {        
      var columnName = columnNames[i];
      s = 0;

      while (myExcel[s][columnName]) {

        if ((columnName === "shortest")) {
          var row = myExcel[s][columnName];
          shortArray.append(row);            
          s++;

        } else if ((columnName === "longest")) {
          var row = myExcel[s][columnName];
          longArray.append(row);            
          s++;

        } else if ((columnName === "irrelevant")) {
          var row = myExcel[s][columnName];
          irrArray.append(row);            
          s++;
        }
      }
    }

問題:它只工作了一半。 它可以很好地通過第一列(30 行)——它在myExcel[s][columnName]不再存在時停止(當columnName = "shortest" myExcel[s][columnName] columnName = "shortest"並且在s = 29 )。 然后,它一直通過columnName = "longest"s = 89然后給我錯誤“TypeError:無法讀取未定義的屬性'longest'”。 我假設這是因為它試圖通過不存在的第 90 行。 但我認為這就是我的 while 循環將停止的地方。

我試過的:

做while循環

    //blah

      do {

        //blah

      } while (myExcel[s][columnName]);

添加了額外的 while 循環條件

    //blah

      while ((myExcel[s][columnName]) && s<myExcel.length) {

        //blah

      }

使用 typeof

    //blah

      while (typeof (myExcel[s][columnName]) === 'string') { //also used this with !=='undefined' and ==='string' when I added a number to the end of each row in the Excel sheet

        //blah

      }

基本上這些的每一個組合(可能還有更多我忘記了)。 我確定這是一個簡單的解決方法,但我已經花了幾天的時間試圖弄清楚,所以我想此時我必須尋求幫助。 我也是一個 MATLAB 人,最近因為 COVID 不得不同時學習 Python 和 Javascript,所以這可能是一個語言切換問題(雖然我不這么認為,因為我已經用谷歌搜索了好幾天了) . 任何幫助將不勝感激!

在您的 while 循環中,將檢查更改為,

while(myExcel[s] && myExcel[s][columnName] ) {

如果您正在編寫現代 Js,那么您可以像這樣簡單地選擇鏈接它, while(myExcel[s]?.[columnName])

問題是,您正試圖在外部數組中遍歷。 但是您首先需要檢查外部數組是否存在,然后再檢查內部數組。

我不完全理解你的方法,但我認為你正在尋找這個:

var shortArray = [];
var longArray = [];
var irrArray = [];

for(let row of myExcel){
  if(!row) continue; // not sure if this check is necessary.
  if(row.shortest) shortArray.append(row.shortest);
  if(row.longest) longArray.append(row.longest);
  if(row.irrelevant) irrArray.append(row.irrelevant);
}

暫無
暫無

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

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