繁体   English   中英

javascript-如何在JavaScript中最小化if else语句与文件类型?

[英]How to minimize if else statement with file types in javascript?

我有使用if else语句的代码。 我想将其最小化。

var str = "";
        var isPreview=true;
        var dl = Files.findOne({_id:item._id}).link();
        var filename = item.name.split('.').pop().toLowerCase();
        if(filename == "wav" || filename == "mp3" || filename == "ogg" ) {
            str = "fa fa-file-audio-o";
            isPreview=false;
        }
        else
        if(filename == "jpg" || filename == "jpeg" || filename == "gif" || filename == "bmp" || filename == "png" )
            str = "fa fa-file-image-o";
        else
        if(filename == "flv" || filename == "wmv" || filename == "mp4" || filename == "3gp" || filename == "webm" ) {
            str = "fa fa-file-movie-o";
            isPreview=false;
        }
        else
        if(filename == "pdf" )
            str = " fa fa-file-pdf-o";
        else
        if(filename == "txt" || filename == "rtf" )
            str = " fa fa-file-text-o";
        else
        if(filename == "xls" || filename == "xlsx" ) {
            str = " fa fa-file-excel-o";
            isPreview=false;
        }
        else
        if(filename == "doc" || filename == "docx" ) {
            str = " fa fa-file-word-o";
            isPreview = false;
        }
        else
        if(filename == "ppt" || filename == "pptx" ) {
            str = " fa fa-file-powerpoint-o";
            isPreview = false;
        }
        else
        if(filename == "zip" || filename == "rar") {
            str = " fa fa-file-zip-o";
            isPreview = false;
        }
        else{
            isPreview=false;
            str = " fa fa-file";
        }
        if(Files.findOne({_id:item._id}).infected){
            isPreview=false;
            str = " fa fa-ban";
        }

执行此代码后,输出应为字符串和布尔值。 如何使用数组解决此问题?

如您所见,在每个if else语句中,它们具有不同数量的表达式。 有时它只会检查1种文件类型。 有时它将检查多种文件类型。

如何在此问题中使用数组或对象?

您应该为此使用开关

  var filename = item.name.split('.').pop().toLowerCase();
  switch( filename ){
    case 'wav':
    case 'mp3':
    case 'ogg':
        str = "fa fa-file-audio-o";
        isPreview=false;   
    break;

    case 'jpg':
    case 'jpeg':      
    case 'gif': 
    case 'bmp':
    case 'png':     
        str = "fa fa-file-image-o";
        break;

    case 'flv':
    case 'wmv':
    case 'mp4':        
    case '3gp':
    case 'webm':   
        str = "fa fa-file-movie-o";
        isPreview=false;
        break;


    .......


    default:
      // your default value
      break;
    }     

也许您可以使用正则表达式:

switch(true) {
    case /^(jpg|jpeg|gif|bmp|png)$/.test(filename):
        // image
        break;
    case /^(flv|wmv|mp4|3gp|webm)$/.test(filename):
        // movie
        break;
    // ...
}    

您可以将数据收集到数组中,并使用文件类型为哈希的对象。 然后为找到的对象分配所需的值。

var fileTypes = [
        { type: ["wav", "mp3", "ogg"], preview: false, value: "fa fa-file-audio-o" },
        { type: ["jpg", "jpeg", "gif", "bmp", "png"], preview: true, value: "fa fa-file-image-o" },
        { type: ["flv", "wmv", "mp4", "3gp", "webm"], preview: false, value: "fa fa-file-movie-o" },
        { type: ["pdf"], preview: false, value: " fa fa-file-pdf-o" },
        { type: ["txt", "rtf"], preview: false, value: " fa fa-file-text-o" },
        { type: ["doc", "docx"], preview: false, value: " fa fa-file-excel-o" },
        { type: ["xls", "xlsx"], preview: false, value: " fa fa-file-word-o" },
        { type: ["ppt", "pptx"], preview: false, value: " fa fa-file-powerpoint-o" },
        { type: ["zip", "rar"], preview: false, value: " fa fa-file-zip-o" },
        { type: ["default"], preview: false, value: " fa fa-file" },
    ],
    hash = {};

fileTypes.forEach(function (a) {
    a.type.forEach(function (b) {
        hash[b] = a;
    });
});

var fileType = hash[filename] || hash.default,
    str = fileType.value,
    isPreview = fileType.preview;

数据驱动的解决方案:

 const CLASS_AND_PREVIEW_LIST = [ [["wav", "mp3", "ogg"], [" fa fa-file-audio-o", false]], [["jpg", "jpeg", "gif", "bmp", "png"], [" fa fa-file-image-o", true]], [["flv", "wmv", "mp4", "3gp", "webm"], [" fa fa-file-movie-o", false]], ]; const CLASS_AND_PREVIEW_INFECTED = { cssClass: " fa fa-ban", isPreview: false }; const CLASS_AND_PREVIEW = {}; CLASS_AND_PREVIEW_LIST.forEach(([exts, value]) => { const fileTypeObj = { cssClass: value[0], isPreview: value[1] }; exts.forEach(ext => { CLASS_AND_PREVIEW[ext] = fileTypeObj; }); }); function getClassAndPreviewForExt(ext) { if (CLASS_AND_PREVIEW.hasOwnProperty(ext)) { return CLASS_AND_PREVIEW[ext]; } return null; } function getClassAndPreview(fileObj) { if (fileObj.infected) { return CLASS_AND_PREVIEW_INFECTED; } return getClassAndPreviewForExt(fileObj.ext); } console.log(getClassAndPreview({ infected: false, ext: "avi"} )); console.log(getClassAndPreview({ infected: false, ext: "bmp"} )); console.log(getClassAndPreview({ infected: true, ext: "any"} )); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM