如果陈述成三元,则不能缩短

时间:2016-05-11 19:56:28

标签: javascript if-statement ternary-operator

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

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

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

工作代码w / 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"));

代码w /三元语句不起作用

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>最长的? currentWord:最长的;                                 ^ TypeError:无法读取未定义的属性“length”

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

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 :(得分:1)

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

不是

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

因为您忘记包含return声明:

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

答案 3 :(得分:0)

试试这个:

function 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"));