簡體   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