JavaScript:基于MIME类型属性转换对象结构
需求与实现方案
问题描述
给定如下JavaScript对象作为输入:
const mimeTypes = { image: [".svg", ".png", ".gif", ".jpeg", ".jpg"], application: [".pdf", ".zip"], text: [".txt", ".csv"] };
需要将其转换为按MIME类型组织的对象,预期输出如下:
const result = { "image/*": [".svg", ".png", ".gif", ".jpeg", ".jpg"], "application/zip": [".zip"], "application/pdf": [".pdf"], "text/*": [".txt", ".csv"] };
核心规则:
application类型需要按后缀拆分,对应到具体的MIME类型(比如.zip对应application/zip,.pdf对应application/pdf)- 其他类型(如
image、text)使用通用格式类型/* - 若输入仅包含某一类(比如
{ text: [".txt", ".csv"] }),输出仅保留该类对应的结构
简洁实现代码
function convertMimeTypes(input) { const result = {}; // 遍历输入对象的每个类型键与对应后缀数组 for (const [type, extensions] of Object.entries(input)) { if (type === 'application') { // 处理application类型,逐个拆分后缀 extensions.forEach(ext => { const subtype = ext.slice(1); result[`${type}/${subtype}`] = [ext]; }); } else { // 其他类型直接使用通用MIME格式 result[`${type}/*`] = [...extensions]; } } return result; } // 测试完整输入 const mimeTypes = { image: [".svg", ".png", ".gif", ".jpeg", ".jpg"], application: [".pdf", ".zip"], text: [".txt", ".csv"] }; console.log(convertMimeTypes(mimeTypes)); // 测试仅text的输入 const textOnly = { text: [".txt", ".csv"] }; console.log(convertMimeTypes(textOnly));
代码说明
- 用
Object.entries()遍历输入对象的键值对,同时获取类型和对应的后缀数组,写法简洁直观 - 针对
application类型,遍历每个后缀并截取掉开头的点,用类型/子类型作为键,值为仅包含当前后缀的数组 - 其他类型直接拼接
类型/*作为键,用扩展运算符[...extensions]复制原数组,避免修改原输入数组的副作用 - 函数会自动根据输入的内容生成对应结构,输入仅包含某一类时,只会输出该类的结果
内容的提问来源于stack exchange,提问作者user21728514
相关产品推荐
相关产品推荐

