提问人:user16201107 提问时间:6/12/2021 最后编辑:user16201107 更新时间:6/12/2021 访问量:282
需要帮助访问循环之外的数据[undefined] [duplicate]
Need help accessing data outside of a loop[undefined] [duplicate]
问:
源是 excel 文件。我解析并遍历了分配标题的列。到目前为止,这工作正常。但是,我似乎无法在 for 循环之外访问此数据,因为它每次都显示为“未定义”。
我正在使用 xls 包,这是在 javascript 中。
由于敏感信息的种类,更改了变量名称以发布代码。如果有什么方法可以更好地澄清,请告诉我。谢谢!
let data = []
for (let fname of fileList) {
if (file_count > 1) {
continue
} else {
}
let excelFile =
XLSX.readFile(`FILE.xlsm`,
{
cellDates: true,
});
log('FILENAME', fname)
let sheet_name;
for (let sheet in excelFile.Sheets) {
sheet_name = sheet
log('SHEET NAME', sheet)
}
let array = XLSX.utils.sheet_to_json(excelFile.Sheets[sheet_name],
{
header:
['HEADER_1',
'HEADER_2',
'HEADER_3']
} );
log('array', array[0].HEADER_1)
for(let i = 0; i<array.length; i++){
let data = {
Obj_1: array[i].HEADER_1,
Obj_2: array[i].HEADER_2,
Obj_3: [i].HEADER_3
}
}
}
答:
0赞
r4pt0s
6/12/2021
#1
在循环中使用 let 定义的变量是块作用域的。 这意味着,您的变量数据只能在 for 循环中访问。
要克服这个问题,你可以做的是,使用你在循环外部定义的数组。
例如
for(let i = 0; i<array.length; i++){
data.push({
Obj_1: array[i].HEADER_1,
Obj_2: array[i].HEADER_2,
Obj_3: [i].HEADER_3
});
}
然后,数据变量将在循环外部访问,它将包含所有其他数据。
您使用的 let 数据不起作用的问题是,您在循环中再次声明了变量数据。
评论
0赞
user16201107
6/12/2021
谢谢!我将其应用于我的代码。不过,这里有两个循环。一个用于文件,另一个用于 excel 中的数据。我不确定我是否应该保留两个循环,或者我是否应该在两个循环之外或只是在第二个循环之外初始化数据。
0赞
user16201107
6/12/2021
忘记标记@r4pt0s
0赞
r4pt0s
6/12/2021
当然,如果你有两个循环,并且需要两个循环来处理数据,那么你应该将 let data=[] 保留在代码中的位置。只需删除循环中的 let 关键字并添加 push 方法即可将数据推送到变量数据中。我会更新我的答案。@user16201107
评论
let data
定义一个块作用域变量,该变量在循环外部不存在。那么,为什么您希望可以在循环之外访问它呢?let data
let data
let data = []
undefined
it comes up as "undefined" every time.