如何将这个简单的switch语句重写得更简洁
How can I rewrite this simple switch statement to be more concise?
我有一个函数,它返回一个字符串,指示要显示的特定文件扩展名的图像:
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";
}
}
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 自动修复”;语句前缺少分号“;
- 如何重写下面的函数,使其不会't用于循环
- 如何在 API 调用后和 if 语句中启用提交按钮
- 是“;x==a||b”;以及“;x==a||x==b”;JavaScript中的等效语句
- 带有多个elseif的Javascript if语句
- 这个条件语句的逻辑有问题
- Sharepoint JScript if语句未执行
- 为什么继续;语句冻结浏览器
- Javascript:If-then语句在函数中不起作用
- SharePoint 2010 Jquery/JSON Rest Multiple OR语句-如何
- for循环中的javascript if语句找不到==
- 当使用extern和目标JavaScript时,我如何强制Haxe编译器使用require语句
- jquery if语句返回return wong语句
- 如何重写Javascript If语句以选择Classes而不是ID's的HTML格式
- 如何将这个简单的switch语句重写得更简洁
- 有没有办法将其重写为 switch 语句
- 如何使用 ng 选项重写以下语句
- 重写JavaScript条件语句