未定义2D数组单元时,while循环不会停止javascript

问题描述

目标:遍历2D数组的列(来自具有不均匀列长的Excel文件),然后将存在的条目放入自己的数组中。

我做了什么:最长的列的长度是90个条目,这是Excel文件中的第二列,最短的长度是30,即第一列。我设置了一个for循环来遍历每一列,并建立了一个while循环来遍历每一个存在的条目,并将其附加到新数组中。

原始代码:

    //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"时和s = 29之后)停止。然后,它一直贯穿columnName = "longest"s = 89,然后给出错误“ TypeError:无法读取未定义的'最长'属性”。我假设这是因为它试图通过第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,所以它可能是语言切换问题(尽管我不这么认为,因为我已经在这一天一直在使用Google搜索和弄乱了它) 。任何帮助将不胜感激!

解决方法

在while循环中,将检查更改为

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

如果您正在编写现代Js,则可以像这样while(myExcel[s]?.[columnName])

问题是,您试图遍历外部数组内部。但是您首先需要检查外部数组是否存在,然后再检查内部数组。

,

我不完全了解您的方法,但是我认为您正在寻找这个方法:

df = pd.DataFrame({0: "text",1: [["foo","bar"]]})
df
      0           1
0  text  [foo,bar]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...