如何解决未定义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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。