1

私はプログラミングの初心者で、このサイトでは初めてです。入れ子になったループについて質問があります。それが起こったのか、私の質問があり、今Javascript for forループとarray.reduce

「ジョン雪がTargaryenです」:これは

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文字コード(スペースバー)をどのように生成したか、配列の長さを23にして、所望の出力に必要な単語を生成した方法などです)。

ご協力いただければ幸いです。多くの、多くの事前に感謝します。

+0

スポイラー警告! –

答えて

5

何が起こっているのかを理解する最善の方法は、このコードをデバッガで実行し、歩いていくことです。あなたのWebブラウザには完全な機能を備えたデバッガが組み込まれており、これを使用することができます。

しかし、簡単に:map配列のサブアレイで

、最初のエントリは、文字コードであり、その文字を使用すべき場所以降のすべてのエントリがあります。たとえば、[111, 1, 6]は、文字コード111("o")は結果の1位と6位にあるはずです。私は実際に混乱してい

部分は、ループが働いていたのは)

を32 CHARCODE(スペースバーを作るでしたか32は、2次の最初の値があるように(ネストされた方法です最後の[32, 3, 8, 11, 13]あり、そしてそれが3位、8、11に入れていますmap配列、のエントリ、および13

とどのようにそれが23に配列の長さを作らなかったし、ために必要な単語を作ります所望の出力)。それは最初のエントリ(文字コード)の値を格納する、サブアレイをループ(1でjを開始する代わりにすることによって)最初のエントリをスキップし、ansにインデックスとして他のすべてを使用することにより

ansで:

// The char code vvvvvvvvv 
ans[map[i][j]] = map[i][0]; 
// ^^^^^^^^^--- where to put it 

そして終わりにそれだけで、その文字の各エントリを変換しreduceと共に使用アキュムレータにそれを追加するString.fromCharCodeを用いansをループ。

+0

うわー!私はコードがどのように動作するかを今すぐに知ることができます。説明がポイントになった!このコミュニティの評判の高いメンバーから期待されています。ありがとう、非常に、TJ!^_ ^ –