You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js如何根据指定多扩展名筛选目录下的图片文件名

问题诊断
  • 原始代码核心错误:直接将单个文件扩展名(字符串类型)与extensions数组做全等比较,二者类型、值均不匹配,过滤条件永远返回false
  • 修改后代码的额外错误:
    1. getexts函数逻辑错误:遍历数组时第一轮循环就直接返回第一个元素"jpg",仅能匹配jpg一种格式
    2. 忽略了path.extname()的返回值会带前缀点号,比如test.jpg调用后返回的是.jpg,和数组中存储的无点格式"jpg"无法匹配
    3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:06:03