试图在我自己的理解中弄清楚这个函数的for循环和if语句是如何工作的。这是因为搜索了这个挑战,这个代码更短,但结果与我的初始代码相同。困惑是最长的变量。它存储大于str.length(5)的单词的最长长度 - 或者我可能是错的。对于某些未被理解的原因,语言(8)的长度不存储在变量中,尽管5,10和18是。
function longestWord(str) {
str = str.split(" ");
var longest = 0;
var word = null;
for (var i = 0; i < str.length; i++) {
if (longest < str[i].length) {
console.log("str = " + str[i]);
longest = str[i].length;
console.log("longest = " + longest); //What happended to 8 for language?
word = str[i];
}
}
return word;
}
console.log(longestWord("Using the JavaScript language bademnostalgiastic"));
答案 0 :(得分:1)
JavaScript
长度为10个字符,在language
之前进行测试,因此if
测试失败并跳过。
它存储大于str.length(5)
的单词的最长长度
没有。它存储了迄今为止看到的最长的长度。 <{1}}在测试5
时获得Using
,但很快就会被覆盖。
答案 1 :(得分:1)
所有这一切都跟踪了最长的单词(并将焦数存储在longest
中)。对于每次迭代,它会测试下一个字符串是否包含的字符数多于当前记录的最长字符串(由longest
确定)。如果是这样,它会存储新的字符数,因为它是新的“最长的赢家”。
以下是这里发生的事情:
longest
所以在这一步结束时你所拥有的实际字符串(存储在word
中)和字符数(存储在longest
中)的字符数最多。
答案 2 :(得分:1)
“JavaScript”的长度为10,比“语言”长。由于“JavaScript”首先出现,“语言”不会长于最长,因此if语句将导致错误。
答案 3 :(得分:1)
array str[]={Using, the,JavaScript, language ,bademnostalgiastic}
迭代1
str[i]=Using
str.length=5 (a)
Longest =0 (b)
since (a)>(b)
Longest =5
word=Using
迭代2
str[i]=the
str.length=3 (a)
Longest =5 (b)
since (a)<(b)
Longest and word remain same
so,Longest =5
and,word=Using
迭代3
str[i]=JavaScript
str.length=10 (a)
Longest =5 (b)
since (a)>(b)
so,Longest =10
and,word=JavaScript
<强> Iteration4 强>
str[i]=language
str.length=8 (a)
Longest =10 (b)
since (a)<(b)
所以最长的相同
so,Longest =10
and,word=JavaScript
<强> Iteration5 强>
str[i]=bademnostalgiastic
str.length=18 (a)
Longest =10 (b)
since (a)>(b)
so,Longest =18
and,word=bademnostalgiastic
END OF LOOP
最长的单词bademnostalgiastic
答案 4 :(得分:0)
这是一个细分:
str = str.split(" ");
这是在空格上分割字符串数组。
for (var i = 0; i < str.length; i++)
我们从这里开始,i
(迭代器变量)为0.我们将继续执行此循环,而i
小于{{1}的长度}}。每次进行此循环时,我们都会将str
增加1。
i
我们在此处检查我们保存的if (longest < str[i].length)
是否小于我们正在查看的字符串长度。
longest
这里我们分配新的最长字符串,因为这个字符串较长。
longest = str[i].length;
我们也保存了这个词,可能以后我们可以使用它。
word = str[i];
循环结束后,我们会将return word;
作为结果发回。
word
这是你的电话和打印声明。
您之所以看到5,10和18,是因为您只在值大于您已经看过的值时才打印出值。