【问题标题】:Javascript: what's the most elegant way to check whether A is equal to B or C?Javascript:检查 A 是否等于 B 或 C 的最优雅的方法是什么?
【发布时间】:2012-07-04 17:19:40
【问题描述】:

我需要评估一个变量并检查它是否等于其他两个变量之一。

我这样做: if (a == b || a == c) { }

我觉得必须有一种更好的方法来以这种方式评估变量。有吗?

【问题讨论】:

  • 来吧,这会适得其反。
  • 您能解释一下原因吗?
  • 从后面的cmets来看,这可能是stackoverflow.com/questions/237104/…的复制品
  • 嗯,这实际上是另一个问题。我只是觉得我这样做的方式有些多余,但这可能是因为我没有CS的理论背景。
  • @exizt:看答案;编写函数、循环、检查浏览器支持,包括库;需要我多说。

标签: javascript evaluation


【解决方案1】:

如果您只是将一个值与其他 2 个值进行比较,那么这是最有效和最优雅的解决方案。无需更改任何内容!

如果您想查看一个变量是否等于更大的其他变量集合中的任何一个,您可以执行以下操作:

if(([b,c,d,e,f].indexOf(a) !== -1) {
  // "a" is equal to either b, c, d, e, or f
}

indexOf 方法在旧版浏览器中可能不可用,因此请务必检查一下!在旧版浏览器中,您可以使用编写自己的方法来搜索数组或利用任何流行的通用库......大多数都会有这个功能。

【讨论】:

  • 如果我需要将其与更多值(例如 5 或 6)进行比较,该怎么办?
  • 只需创建一个包含您要比较的所有值的数组,然后在该数组上调用indexOf 方法,将您要比较的一个值作为唯一参数。跨度>
【解决方案2】:

你也可以使用Array.prototype.includes (ES7)。

if ([b, c, d, e].includes(a)) {
  // do stuff
}

【讨论】:

    【解决方案3】:

    .. 如果你有很多变量要比较,你可能会使用这个:

    if ([a,b,c,d,e,f,g,h].indexOf(yourValue) >= 0)
    

    还有另一种方法,如果您愿意多打几字:

    if (yourValue in {a:0,b:0, c:0, ... })
    

    或者你可能有一个返回数组对象版本的函数:

    var wrap = function(){
        var obj = {};
        for (var i=0; i<arguments.length; i++)
            obj[arguments[i]]=0;
        return obj;
    };
    

    然后:

    if (yourValue in wrap(a,b,c,d,e,f,g))
    

    如果你对 jQuery 没问题,你可以使用jQuery's way:

    $.inArray(yourValue, [a,b,c,d,e,f])
    

    【讨论】:

      【解决方案4】:
      var values = [b,c,d,e,f];
      
      for (var i=0,n=values.length; i<n; i++){
         if (values[i] == a){
             // ...
             break;
         }
      }
      

      【讨论】:

      • 但是对于两个值来说,这肯定是矫枉过正,不是吗?
      • 绝对是。对于两个值,原始问题中的示例是最好的。这对于不同数量的可能性是最好的,或者如果可能性的数量是预先确定的,以减少代码太长和混乱。
      【解决方案5】:

      我认为您上面的内容是最直接的选择。

      此外,在 JavaScript 中有不同种类的等号运算符。如果两个操作数相等,== 相等运算符将返回布尔值 true。 JavaScript 将尝试将不同的数据类型转换为相同的类型以进行比较。 === 运算符是严格相等运算符,仅当两个操作数相等且类型相同时才返回布尔值 true。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 2011-08-01
        • 2019-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多