[英]How does this for loop and if statement work?
試着弄清楚我自己的理解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"));
JavaScript
長度為10個字符,在language
之前進行測試,因此if
測試失敗並被跳過。
它存儲大於str.length(5)的單詞的最長長度
不,它存儲了迄今為止看到的最長的長度。 當測試Using
時它會變為5
,但很快就會被覆蓋。
所有這一切它跟蹤最長的單詞(以及在存儲字符數longest
)。 對於每次迭代,它測試以查看下一個字符串是否具有比當前記錄的最長字符串(由longest
確定)更多的字符。 如果是這樣,它會存儲新的字符數,因為它是新的“最長的贏家”。
這是這里發生的事情:
longest
字符中 所以在這個結尾處,你擁有實際的字符串(存儲在word
)和字符數最多(存儲在longest
的字符串)。
“JavaScript”的長度為10,比“語言”長。 由於“JavaScript”首先出現,“語言”不會長於最長,因此if語句將導致false。
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
這是一個細分:
str = str.split(" ");
這使得在空格上分割的字符串數組。
for (var i = 0; i < str.length; i++)
我們從這里開始, i
(迭代器變量)為0.我們將繼續執行此循環,而i
小於str
的長度。 我們要提高i
的各1個,我們通過這個循環走的時間。
if (longest < str[i].length)
在這里,我們檢查我們保存的longest
是否小於我們正在查看的字符串長度。
longest = str[i].length;
這里我們分配新的最長字符串,因為這個字符串更長。
word = str[i];
我們也保存了這個詞,可能以后我們可以使用它。
return word;
循環結束后,我們將發回word
作為結果。
console.log(longestWord("Using the JavaScript language bademnostalgiastic"));
這是您的電話和打印聲明。
您看到5,10和18的原因是因為您只在值大於您已經看到的值時打印出值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.