【问题标题】:Javascript formatting for if condition [duplicate]if条件的Javascript格式[重复]
【发布时间】:2013-01-08 15:38:07
【问题描述】:

可能重复:
Check variable equality against a list of values
Javascript: Comparing SINGLE Value Against MULTIPLE Values with OR Operands

首先,我是 javascript 方面的新手。请让我知道是否有任何简单的方法可以格式化以下代码。

if( fileName== 'doc' || fileName=='docx' || fileName=='xls' || fileName=='xlsx' || fileName=='ppt' || fileName=='pdf' ){

Do something

} else{

    Do something

}

【问题讨论】:

  • 我会保留一个可能的文件扩展名数组,然后检查该值是否在该数组中。

标签: javascript jquery


【解决方案1】:
var SUPPORTED_FILE_EXTENSIONS = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pdf'];

if(SUPPORTED_FILE_EXTENSIONS.indexOf(fileName) != -1){
    //Do Something
} else {
    //Do Something Else
}

Array.indexOf() - 请注意,这还包括有关为旧版浏览器 (I.E. IE) 添加向后兼容性支持的信息。

【讨论】:

  • Tnx @briguy37 :) 。如果你解释一下这个'FILE_SUPPORTED_EXTENSIONS.indexOf(fileName)!= -1'会很好
  • 注意indexOf 不被旧IE支持
  • SUPPORTED_FILE_EXTENSIONS 是数组; .indexOf 检查字符串(文件名)的出现并返回它的索引位置,除非它没有找到然后它返回 -1。
  • @user1817630: 数组上的indexOf 如果数组不包含您提供的第一个参数,则会给您-1。因此,在这种情况下,当 fileName 位于受支持的文件扩展名中时,该检查将为您提供 true 的值。
【解决方案2】:
var validTypes = /docx?|xlsx?|ppt|pdf/;

if (fileName.match(validTypes)) {
    ...
}

注意:正则表达式中的问号?表示前面的字符是可选的,因此它可以匹配docdocx,管道|表示or所以它将匹配docxls

【讨论】:

  • 非常好,从没想过使用正则表达式。不像数组那样可读,但我喜欢它! +1
【解决方案3】:

也许像

var filenames = ['doc','docx','xls','xlsx','ppt','pdf'];
if(filenames.indexOf(fileName) >= 0 ) {
  // Do something
} else {
    // Do something else
}

【讨论】:

  • 最易读的方式,一直用这个! +1
【解决方案4】:

也许switch 语句是最快的选择之一:

switch (fileName) {
    case "doc":
    case "docx":
    ...
        // ...
    default:
        // else
}

【讨论】:

    【解决方案5】:

    您可以重新格式化它以使代码更易于阅读:

    if( fileName == 'doc' || 
        fileName == 'docx' || 
        fileName == 'xls' || 
        fileName == 'xlsx' || 
        fileName == 'ppt' || 
        fileName == 'pdf' ){
        Do something
    } else{
        Do something
    }
    

    或者,您可以使用 jQuery.inArray()array.indexOf() 等结构来减少代码重复:

    var arr = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pdf'];
    if (jQuery.inArray(fileName, arr) > -1){
        Do something
    } else{
        Do something
    }
    

    【讨论】:

    • 为什么不是原生的indexOf
    • @JosephMarikle - 我刚刚添加了这个。两者都可以,因为他正在使用 jQuery(或者至少将问题标记为这样),所以这取决于个人喜好。
    【解决方案6】:

    创建数组更容易阅读。加上使用 jQuery 的 $.inArray() 方法。它的工作原理与 .indexOf() 类似,另外一个好处是它与旧版本的 IE 兼容,旧版本的 IE 缺少很多数组函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2019-04-29
      相关资源
      最近更新 更多