不能将 if 语句缩短为三元

can't shorten if statement into ternary

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

下面发布的代码的第一个版本有效,但第二个版本给我一条错误消息,说它们的参数 longest 没有长度 属性,但由于我已经设置了初始条件长度应为 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 > longest.length ?当前字:最长; ^ 类型错误:无法读取未定义的 属性 'length'

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

return 个结果。

如果您没有 return 结果,那么它将默认为 return 未定义。它会尝试获取未定义的长度,这就是它抛出错误的原因。

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

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

不是

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

因为您忘记包含 return 语句:

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

试试这个:

函数 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"));