【问题标题】:How can I turn an if-else statement with a nested if statement into one ternary statement?如何将带有嵌套 if 语句的 if-else 语句转换为一个三元语句?
【发布时间】:2015-12-03 19:39:36
【问题描述】:

这是我目前拥有的代码:

        if (isStandard(statement)) {
            if (isPerfect(statement)) {
                alert("This is a perfect palindrome.");
            } else {
                alert("This is a standard palindrome.");
            }
        } else {
            alert("The statement is not a palindrome.");
        }

我希望能够将其转换为单个三元语句,其中 alert() 中的字符串将是返回的值。我知道如何对 if-elseif-else 语句执行此操作,但不适用于嵌套 if。

【问题讨论】:

  • 为什么还要这样做,你的代码这样可读性更强
  • 通过查看您的代码,我认为它是 if else 语句与 if 中的另一个 if else 语句

标签: javascript if-statement ternary-operator simplify


【解决方案1】:

如果你真的想要一个三元...

alert(
    !isStandard(statement) ? "The statement is not a palindrome." : 
    isPerfect(statement) ? "This is a perfect palindrome." : 
    "This is a standard palindrome.");

请注意,在大多数情况下,代码可读性应该胜过简洁性。但是,我不反对三元组,只要它们是可读的。我个人不喜欢这个缺乏可读性。它开始逐渐进入“让我思考”类别。

注意 - @nderscore 询问我为什么更改条件的顺序。我这样做纯粹是为了简化表达。否则,您将开始重复对isStandard 的调用,或者进入这种看起来怪异的“树”状条件逻辑层次结构,如下所示:

alert(
    isStandard(statement) ? 
        (isPerfect(statement) ? 
            "This is a perfect palindrome." : 
            "This is a standard palindrome.") : 
    "The statement is not a palindrome.");

我更喜欢前者……有些人可能更喜欢后者。

【讨论】:

  • 为什么要改变条件的顺序,否定第一个条件的返回值?
  • 我个人不喜欢这个缺乏可读性。我见过更糟糕的情况。
  • 我完全同意你关于可读性的观点。字符串将存储在单独的变量中,我实际上将它们基于在这里只是为了提高可读性(所以我理解你的意思)。不过,谢谢您的回复!
【解决方案2】:
var m = [" a perfect ", " a standard ", " not a "];
alert("This is" 
     + (isStandard(statement) 
     ? isPerfect(statement) 
       ? m[0] : m[1] 
     : m[2]) 
     + "palindrone")

var m = [" a perfect ", " a standard ", " not a "];

console.log("This is" + (true ? true ? m[0] : m[1] : m[2]) + "palindrone")

【讨论】:

    【解决方案3】:

    不是三元的,但更具可读性。

    switch(number(isStandard(statement)) + number(isPerfect(statement)))
    {
          case 2:
              alert("This is a perfect palindrome.");
          case 1:
              alert("This is a standard palindrome.");
          case 0:
              alert("The statement is not a palindrome.");
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-09
      • 1970-01-01
      • 2023-01-07
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多