将字符串相互匹配

时间:2013-08-19 06:45:13

标签: javascript jquery string mime-types

我需要将字符串与其他字符串匹配,特别是扩展名或mime类型与文件类型。例如“png”,“image / png”,“image / jpeg”应匹配“image”等。

目前我正在使用此方法:

fileFormats = {
    'image/png':'image',
    'image/jpeg':'image',
    'png':'image',
    'jpeg':'image',
    'jpg':'image'
}

fileFormats["png"]

然而,随着扩展/ mime类型数量的增加,这可能会非常重复。 我也认为应该有/更好的方法。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

如果您从格式名称到mime类型和/或文件扩展名进行映射,则不应重复。然后,您可以反转列表:

mimeTypes = {
    'image' : ['image/png', 'image/jpeg', 'png', 'jpeg', 'jpg', ...],
    'text'  : [ . . .],
    . . .
}
fileFormats = {};
for (type in mimeTypes) {
    mimeList = mimeTypes[type];
    for (i = 0, n = mimeList.length; i < n; ++i) {
        fileFormats[mimeList[i]] = type;
    }
}

答案 1 :(得分:0)

实际上,在某些时候你仍然需要一个字典/地图。

我的第一个评论是你不应该在同一个地图中混合使用MIME和文件扩展名。相反,你应该有2张地图:

extensionToMime = {};
mimeToExtension = {};

第二条评论是1个扩展名可以包含多个MIME,因此extensionToMime映射的值应该是数组。

但是,如果你真的想避免使用地图(它会以O(1)btw返回你的结果,很难做得更快),你仍然可以找出一些规则来构建MIME类型,具体取决于它的扩展名。例如:

 var simpleMimes = { "png":true, "jpeg":true, "gif":true }; // mimicking a set
 // then, when you need it:
 function getMimeFromExtension(ext) {
   if (ext in simpleMimes) {
     return "image/" + ext;
   }
   return extensionToMime[ext];
 }

这显然不适用于所有扩展,只有在使用少量可以轻松构建的MIME时才能使用。