我有一个函数,它返回一个字符串,指示要显示的特定文件扩展名的图像:
getImage = function (file) {
switch (file.extension) {
case "txt":
return "document.jpg";
case "doc":
return "document.jpg";
case "jpg":
return "image.jpg";
case "gif":
return "image.jpg";
case "png":
return "image.jpg";
case "mpg":
return "video.jpg";
// And so on for 50+ file extensions...
default:
return "file.jpg";
}
}
我需要支持大量的文件扩展名,所以我的switch语句非常庞大。但由于许多文件扩展名共享相同的映像,我觉得可能有一种方法可以将扩展名组合在一起,使其更加简洁。
那么,我该如何用更简洁的方式重写这篇文章呢?(任何答案都需要与IE8兼容)
您可以组合案例:
getImage = function (file) {
switch (file.extension) {
case "txt":
case "doc":
return "document.jpg";
case "jpg":
case "gif":
case "png":
return "image.jpg";
case "mpg":
return "video.jpg";
// And so on for 50+ file extensions...
default:
return "file.jpg";
}
}
你也可以使用地图代替:
var extmap = {
"txt": "document.jpg",
"doc": "document.jpg",
"jpg": "image.jpg",
"gif": "image.jpg",
"png": "image.jpg",
"mpg": "video.jpg",
// And so on for 50+ file extensions...
};
getImage = extmap[file.extension] || "file.jpg";
但是你不能把案例组合起来。
var types = {"txt":"document.jpg", "doc":"document.jpg"}
return types[file.extension]
getImage = function (file) {
var img = ['jpg', 'gif', 'png' ...]
, doc = ['doc', 'text' ...]
, vid = ['mpg', 'mp4' ...]
, ext = file.extension
;
if (img.indexOf(ext) >= 0) return 'image.jpg';
if (doc.indexOf(ext) >= 0) return 'document.jpg';
if (vid.indexOf(ext) >= 0) return 'video.jpg';
return 'file.jpg';
}
您可以将case
组合为相同的返回值
getImage = function (file) {
switch (file.extension) {
case "txt":
case "doc":
return "document.jpg";
case "jpg":
case "gif":
case "png":
return "image.jpg";
case "mpg":
return "video.jpg";
// And so on for 50+ file extensions...
default:
return "file.jpg";
}
}
如其他答案中所述,您可以组合案例。这在您的情况下会更好,因为一个图像映射到多个扩展。另一种可能性是使用对象文字:
getImage = function (file) {
var imageList = {
txt: "document.jpg",
doc: "document.jpg",
// ...
};
return imageList[file.extension] || "file.jpg";
}
如果
if( file.extension == "txt" || file.extension == "doc" || ... )
return "image.jpg";
The switch statement is used to perform different action based on different conditions
就你而言,我认为如果更好的话。
如果你想使用switch对扩展进行分组,你可以使用这个:
switch (file.extension) {
case "txt":
case "doc":
return "document.jpg";
case "jpg":
case "gif":
case "png":
return "image.jpg";
case "mpg":
return "video.jpg";
// And so on for 50+ file extensions...
default:
return "file.jpg";
}
您可以使用字典
var format_dict = {"txt":"document.jpg", "doc":"document.jpg","mpg":"video.jpg"......};
if (file.extension in format_dict) {
return format_dict[file.extension];
}
return "file.jpg";
你能试试吗,你可以对case
语句进行分组
getImage = function (file) {
switch (file.extension) {
case "txt":
case "doc":
return "document.jpg";
case "jpg":
case "gif":
case "png":
return "image.jpg";
case "mpg":
return "video.jpg";
// And so on for 50+ file extensions...
default:
return "file.jpg";
}
}
您可以在您的案例中添加逗号,如下所示:
getImage = function (file) {
switch (file.extension) {
case "txt","doc":
return "document.jpg";
case "jpg","gif","png":
return "image.jpg";
case "mpg":
return "video.jpg";
// And so on for 50+ file extensions...
default:
return "file.jpg";
}
}