[英]Javascript nested for loop and array.reduce
我是編程新手,並且是該站點的新手,我對嵌套循環有疑問。 這是代碼:
function eddardStarkSecret() {
var ans =[];
var map = [
[111, 1, 6], [110, 2, 5, 22], [115, 10], [83, 4], [119, 7],
[105, 9], [97, 12, 15, 18], [84, 14], [114, 16, 19],
[103, 17], [121, 20], [101, 21], [32, 3, 8, 11, 13], [74,0]
];
for (var i = 0; i < map.length; i++) {
for (var j = 1; j < map[i].length; j++)
ans[map[i][j]] = map[i][0];
}
return ans.reduce(function (prev, curr) {
return prev + String.fromCharCode(curr);
},"");
}
代碼的輸出是這樣的:“喬恩·雪諾是塔加里安”
現在,我的問題是,它是怎么發生的? 我對array.reduce()部分的工作方式有點了解。 我真正感到困惑的部分是嵌套的for循環是如何工作的(例如它如何產生32個charcode(空格鍵)以及如何使數組長度達到23並產生所需輸出所需的單詞)。
任何幫助將不勝感激。 非常感謝。
了解正在發生的事情的最好方法是在調試器中運行此代碼,並逐步進行調試。 您的Web瀏覽器內置了功能齊全的調試器,您可以將其用於此功能,或者任何JavaScript IDE都可以使用。
但簡短地說:
在map
數組的子數組中,第一個條目是字符代碼,所有后續條目都是該字符應使用的位置。 因此,例如[111, 1, 6]
告訴我們字符代碼111( "o"
)應該在結果中的位置1和6處。
我真正感到困惑的部分是嵌套的for循環是如何工作的(例如它是如何產生32個字符的(空格鍵)
32是map
數組中倒數第二個條目中的第一個值,為[32, 3, 8, 11, 13]
,因此將其放在位置3、8、11和13處。
以及如何使數組長度達到23,並產生所需輸出所需的字)。
通過循環遍歷子數組,跳過第一個條目(通過將j
從1而不是開頭),並使用所有其他條目作為ans
索引,它將第一個條目的值(字符代碼)存儲在ans
:
// The char code vvvvvvvvv
ans[map[i][j]] = map[i][0];
// ^^^^^^^^^--- where to put it
然后最后,它使用String.fromCharCode
循環遍歷ans
,將每個條目轉換為其字符,並將其附加到與reduce
使用的累加器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.