我正在尝试更多地习惯使用三元运算符而不是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”
答案 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"));