![](/img/trans.png)
[英]Javascript: 2d array is defined, but when assigning an element of the 2d array to a variable, it becomes 'undefined'
[英]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.