Node.js如何根据指定多扩展名筛选目录下的图片文件名
问题诊断
- 原始代码核心错误:直接将单个文件扩展名(字符串类型)与
extensions数组做全等比较,二者类型、值均不匹配,过滤条件永远返回false - 修改后代码的额外错误:
getexts函数逻辑错误:遍历数组时第一轮循环就直接返回第一个元素"jpg",仅能匹配jpg一种格式- 忽略了
path.extname()的返回值会带前缀点号,比如test.jpg调用后返回的是.jpg,和数组中存储的无点格式"jpg"无法匹配 for...in用于遍历数组索引而非值,取值逻辑不符合预期
修复后的完整代码
function fName(fp) { const { readdirSync } = require('fs'); const path = require("path"); // 扩展名统一加前缀点,和path.extname返回格式对齐 const extensions = [".jpg", ".jpeg", ".png"]; // 读取目录下所有文件 const rawFileNames = readdirSync(fp, { withFileTypes: true }) .filter(dirent => dirent.isFile()) .map(dirent => dirent.name); // 多扩展名匹配:判断当前文件的小写后缀是否存在于扩展名列表中 const fileNames = rawFileNames.filter(file => extensions.includes(path.extname(file).toLowerCase()) ); console.log(fileNames); }
关键修改说明
- 扩展名数组统一增加
.前缀,和path.extname的返回格式保持一致,避免匹配失败 - 用数组内置的
includes()方法判断当前文件后缀是否在允许的扩展名列表中,无需手动写遍历逻辑,简洁且不会出现提前返回的问题 - 保留了原有的转小写逻辑,兼容后缀大小写混合的场景(比如
.JPG、.Png等)
内容的提问来源于stack exchange,提问作者Preston
相关产品推荐
相关产品推荐

