【问题标题】:Assign only if condition is true in ternary operator in JavaScript仅当 JavaScript 中的三元运算符中的条件为真时才赋值
【发布时间】:2013-02-07 04:28:17
【问题描述】:

在 JavaScript 中可以做这样的事情吗?

max = (max < b) ? b;

换句话说,仅当条件为真时才赋值。如果条件为假,则什么也不做(不赋值)。这可能吗?

【问题讨论】:

  • 有什么理由避免使用普通的if 语句吗?
  • max = (max
  • 非常老套(max &lt; b)?max = b:0;

标签: javascript ternary-operator


【解决方案1】:

那么不要使用ternary operator,它需要第三个参数。如果您不想更改 max,则需要将其重新分配给 max (max = (max &lt; b) ? b : max)。

if-statement 更清晰:

if (max < b) max = b;

如果你需要它是一个表达式,你可以(ab)使用AND的短路评估:

(max < b) && (max = b)

顺便说一句,如果你想避免重复变量名(或表达式?),你可以使用maximum function:

max = Math.max(max, b);

【讨论】:

  • 第二个比第一个快?因为在内存方面,接缝的使用量是一样的。
  • 这个怎么样:max
  • @UtkarshNarainSrivastava 没有为max 分配任何东西,如果行为不同,则性能无关紧要。
【解决方案2】:

带有三元运算符的表达式必须同时具有两个值,即对于真假两种情况。

你可以

max = (max < b) ? b : max;

在这种情况下,如果条件为假,max 的值不会改变。

【讨论】:

  • 我很好奇......如果条件为假,在幕后,它会运行一个操作吗?还是会自动替换。
  • 我相信总是有操作:评估条件,然后分配两个不同值之一。当然,eval 本身可能会导致许多操作。
【解决方案3】:

如果条件为假,您可以将max 设置为自身。

max = (max < b) ? b : max;

或者您可以尝试使用&amp;&amp; 运算符:

(max < b) && (max = b);

或者为了让您的代码简单,只需使用if

if(max < v) max = b;

【讨论】:

    【解决方案4】:

    我觉得三元比较合适 试试这个

    (max < b) ? max = b : '';
    

    【讨论】:

      【解决方案5】:

      没有一个特定的运算符不是三元运算符,但你可以这样使用它:

      max = (max < b) ? b : max;
      

      【讨论】:

        【解决方案6】:

        我认为更好的方法可能是

        max = Math.max(max, b)
        

        【讨论】:

          【解决方案7】:

          你可以这样做:

          (max < b) ? max = b : ''
          

          【讨论】:

            【解决方案8】:

            你可以试试:

            (max < b) && (max = b);
            

            看看这个例子:

            let max = 10;
            let b = 15;
            (max < b) && (max = b)// this will be true
            console.log("max=", max);
            
            let maxx = 10
            let bb = 5;
            (maxx < bb) && (maxx = bb)// this will be false
            console.log("maxx=", maxx);

            【讨论】:

            • 短路评估,确实必须是给定问题的较短的 sn-p
            【解决方案9】:

            三元运算符用于我们至少有两种可能的结果。

            let no = 10;
            let max = 20;
            
            max = no > max ? no : max
            

            如果你只想使用 if 而不是 else,那么我建议你使用 if not 三元运算符。

            let no = 10;
            let max = 20;
                
            if (no > max){
               max = no
            }
            

            如果你想使用三元运算符,但又不想使用 else 部分,那么你可以使用 this,但这并不是对所有问题都有用

            let no = 10;
            let max = 20;
            
            no > max ? max = no : 0
            

            这里我们只在条件为真时才为 max 变量赋值,否则,我们什么也不做

            【讨论】:

              【解决方案10】:

              没有ES6的例子,我们可以这样使用:

              let list = [{id: "abc", name: "test1"}, {id: "xyz", name: "test2"}]
              let selectedData = {};
                    list.some((exp) => {
                      return (
                        exp.id == "xyz" &&
                        ((selectedData = exp), true)
                      );
                    })
              console.log(selectedData);
              

              在反对票后添加说明: 只需添加描述来解释我的解决方案。如果您有一组对象,并且您希望只满足一个条件,那么我们可以使用some。当id == "xyz" 时,它将设置selectedData。如问题所述,仅当条件为真时才会赋值,否则 selectedData 将为空。

              【讨论】:

                【解决方案11】:

                您可以使用Logical AND assignment (&&=),而不是三元运算符

                基本示例

                let output = false;
                output &&= true;
                console.log(output)

                无法重新分配,因为output 已被定义为false

                const b = 10;
                const max = 1;
                let sum = max < b;
                
                sum &&= 'new value';
                console.log(sum);

                返回一个字符串,因为变量sum已被定义为true

                【讨论】:

                  猜你喜欢
                  • 2017-07-16
                  • 2010-09-05
                  • 2011-07-02
                  • 2021-04-29
                  • 2019-07-21
                  • 2011-03-06
                  • 2019-03-31
                  • 2021-11-23
                  • 2018-08-14
                  相关资源
                  最近更新 更多