使用fs.readdir().map仅返回单个文件信息,如何获取所有文件名与索引?
问题分析与修复方案
核心问题
你的代码存在几个关键错误,导致仅能返回单个文件信息:
map函数内的对象语法错误:属性间需用逗号分隔,而非分号,这会引发语法问题(能运行大概率是代码粘贴时的笔误)。- 未利用
map的返回结果,反而用外部变量tempfileIndex和tempfileName存储循环值:每次循环都会覆盖这两个变量,最终它们仅保留最后一个文件的索引与拆分结果,所以tempfileInfo只推入了最后一次循环的值。 tempfileInfo.push(tempfileIndex, tempfileName)是将两个独立值推入数组,而非每个文件的结构化信息。
另外你看到的索引20是正常现象:文件夹共20个文件,map的index从0开始计数,最后一个文件的index为19,加1后就是20,这是递增顺序,并非从末尾开始索引,你看到的“中间文件”实际是最后一个文件的信息。
修复后的代码
const splitString = (str) => str.split("-"); // 简化箭头函数写法 const getInfo = (filePath) => { // 用map遍历所有文件,生成包含id和拆分后文件名的数组 const fileInfoList = fs.readdirSync(filePath).map((filename, index) => ({ id: index + 1, splitFilename: splitString(filename) })); console.log(fileInfoList); // 输出所有文件的信息数组 return fileInfoList; };
可选调整
- 若不需要索引(id),直接删除
id: index + 1即可。 - 若习惯用
forEach,可改用如下写法:
const getInfo = (filePath) => { const fileInfoList = []; fs.readdirSync(filePath).forEach((filename, index) => { fileInfoList.push({ id: index + 1, splitFilename: splitString(filename) }); }); console.log(fileInfoList); return fileInfoList; };
内容的提问来源于stack exchange,提问作者Meltxx
相关产品推荐
相关产品推荐

