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

如何判断字符串所属数组并返回对应标识名称?

解决文件扩展名匹配数组并返回对应标识的问题

你的思路方向是对的,但switch的用法搞错啦!switch是拿fileExtension的字符串值(比如'jpg')去和每个case后面的内容做全等匹配的,而images.includes(fileExtension)返回的是布尔值true或false,这俩类型完全不匹配,所以你的代码根本走不到对应的分支里。

给你一个简单又易扩展的解决方案,特别适合后续要加更多类型的场景:

用映射对象管理类型与扩展名的对应关系

先把所有类型和对应的扩展名数组整理成一个配置对象,之后要加新类型直接加键值对就行,维护起来超方便:

const filename = 'test.jpg';
const fileExtension = filename.split('.').pop();

// 定义类型映射:键是要返回的标识名,值是对应的扩展名数组
const extensionTypeMap = {
  image: ['png', 'jpg', 'jpeg'],
  pdf: ['pdf'],
  // 以后要加新类型?直接在这里加就行,比如:
  // document: ['doc', 'docx', 'txt'],
  // video: ['mp4', 'mov', 'avi']
};

// 编写匹配函数
function getFileIdentifier(ext) {
  // 遍历映射对象的键值对,找匹配的类型
  for (const [identifier, extensions] of Object.entries(extensionTypeMap)) {
    if (extensions.includes(ext)) {
      return identifier;
    }
  }
  // 如果没有匹配到任何类型,返回默认值
  return 'unknown';
}

// 调用测试
console.log(getFileIdentifier(fileExtension)); // 输出: 'image'

更简洁的写法(一行搞定)

如果你喜欢更紧凑的代码,可以用Object.keys结合find方法:

const getFileIdentifier = (ext) => 
  Object.keys(extensionTypeMap).find(type => extensionTypeMap[type].includes(ext)) || 'unknown';

这种方式的好处是扩展性极强,不管后续有多少种扩展名分类,都不需要修改判断逻辑,只需要在映射对象里新增配置即可,比一堆if-else或者错误的switch写法靠谱多啦。

内容的提问来源于stack exchange,提问作者Miomir Dancevic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:17:36