问题描述
目标:遍历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]