【问题标题】:can't shorten if statement into ternary [closed]无法将 if 语句缩短为三元 [关闭]
【发布时间】:2016-09-07 09:58:52
【问题描述】:

我正在尝试更习惯使用三元运算符而不是 if/else 语句。

下面发布的代码的第一个版本有效,但第二个版本给了我一条错误消息,说它们不是参数最长的长度属性,但是因为我已经设置了一个空字符串的初始条件,长度应该为 0。

这是我的代码的两个版本。如果有人能弄清楚我做错了什么,那就太好了。

带有 if 语句的工作代码

function findLongestWord(str) {
  var strSplit = str.split(' ');
  var longestWord = strSplit.reduce(function(longest, currentWord) {
    if(currentWord.length > longest.length)
       return currentWord;
    else
       return longest;
  }, "");
  return longestWord;
}

console.log(findLongestWord("The quick brown fox jumped over the lazy dog"));

带有不起作用的三元语句的代码

function findLongestWord(str) {
  var strSplit = str.split(' ');
  var longestWord = strSplit.reduce(function(longest, currentWord) {
    currentWord.length > longest.length ? currentWord : longest;
  }, "");
  return longestWord;
}

console.log(findLongestWord("The quick brown fox jumped over the lazy dog"));

我的错误信息是:

currentWord.length > long.length ? currentWord : 最长的; ^ TypeError:无法读取未定义的属性“长度”

【问题讨论】:

  • 需要返回三进制的结果。 return condition ? A : B.

标签: javascript if-statement ternary-operator


【解决方案1】:
function findLongestWord(str) {
  var strSplit = str.split(' ');
  var longestWord = strSplit.reduce(function(longest, currentWord) {
    return currentWord.length > longest.length ? currentWord : longest;
  }, "");
  return longestWord;
}

返回结果。

如果您不返回结果,那么它将默认返回未定义。它将尝试获取 undefined 的长度,这就是它抛出错误的原因。

【讨论】:

  • 答案总是在代码之外包含一些词来解释你做了什么以及为什么这样做会更好。
【解决方案2】:

你错过了返回三元运算结果的结果

return currentWord.length > longest.length ? currentWord : longest;

【讨论】:

    【解决方案3】:
    currentWord.length > longest.length ? currentWord : longest;
    

    不是

    的三元形式
    if(currentWord.length > longest.length)
        return currentWord;
    else
        return longest;
    

    因为您忘记包含 return 声明:

    return currentWord.length > longest.length ? currentWord : longest;
    

    【讨论】:

      【解决方案4】:

      试试这个:

      函数 findLongestWord(str) {

      function findLongestWord(str) {
        var strSplit = str.split(' ');
        return strSplit.reduce(function(longest, currentWord) {
          return (currentWord.length > longest.length) ? currentWord : longest;
        });
      }
      
      document.write(findLongestWord("The quick brown fox jumped over the lazy dog"));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 2014-06-30
        • 1970-01-01
        相关资源
        最近更新 更多