如何判断字符串所属数组并返回对应标识名称?
解决文件扩展名匹配数组并返回对应标识的问题
你的思路方向是对的,但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
相关产品推荐
相关产品推荐

