这个for循环和if语句如何工作?

时间:2015-07-31 14:29:07

标签: javascript

试图在我自己的理解中弄清楚这个函数的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"));

5 个答案:

答案 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,是因为您只在值大于您已经看过的值时才打印出值。