簡體   English   中英

嵌套嵌套的Java循環和array.reduce

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM