【发布时间】:2021-05-23 03:04:12
【问题描述】:
我有一个 FileHelper 方法,它列出了所有文件的名称并最终返回文件名:
import fs from 'fs';
import path from 'path';
class FileHelper {
static ListFiles() {
const fileDir = `${path.resolve()}/Specifications/`;
let files = fs.readdirSync(fileDir);
for (const file in files) {
console.log(file); // Prints filename correctly: 'petstore.json'
}
return files;
}
}
export default FileHelper;
但是,当我调用此方法并在 for 循环中再次打印它时,它会打印数组索引而不是值:
import FileHelper from './Helpers/FileHelper.js';
function main() {
try {
let specifications = FileHelper.ListFiles();
for (const specification in specifications) {
console.log(specification); // prints '0' instead of 'petstore.json'
}
}
catch(err) {
console.error(err);
}
}
main();
为什么在第二个 for 循环中不打印文件名?谢谢!
【问题讨论】:
-
for..in仅迭代键。所以第二段代码是正确的。我不确定为什么第一个会给你名字,fs.readdirSync()无论如何都会返回一个数组,所以遍历数组的键会给你索引。 -
@ArunKumarMohan 虽然这个问题是相关的,但这里的问题是为什么在同一个数组上使用
for..in两次会产生完全不同的结果。 -
@VLAZ 是的,你是对的。但我无法重现该问题。
标签: javascript node.js arrays for-loop