回答編集履歴

3 コード修正

退会済みユーザー

退会済みユーザー

2019/06/12 14:03  投稿

ループ処理がどのように行われるか、**実際に値を代入し処理を追ってみる**と分かりやすいと思います。僕も分からなくなった時は、「順番にプロセスを追ってみる」事で理解できる事がよくあります。
```js
var newCurrent = [];
for ( var y = 0; y < 4; ++y ) {
   newCurrent[ y ] = [];
   
     
       ----- y = 0 ------------------------------
       
            newCurrent[0] = []
           
            newCurrent = [
               []  <== newCurrent[0] に [] を追加;
               [] 
            ]
       --------------------------------------------
                       |
                       |
                       V
                       
       for ( var x = 0; x < 4; ++x ) {
           newCurrent[ y ][ x ] = current[ 3 - x ][ y ];
           
           
               ----- y = 0, x = 0 ---------------------------------------------
                   newCurrent[0][0] = current[3][0]                               |
                                                                                   |
                   newCurrent = [                                                 |
                       [n1]                                                       |
                   ]                                                          y = 0, x = 0
                                                                                   |
                       {{ current[3][0]が 恐らく数値だと思われるため、            |
                           ある数値をn1と表記して代入 }}                          |
                                                                                   V
               ----- y = 0, x = 1 ---------------------------------------------
                   newCurrent[0][1] = current[2][0]                               |
                                                                                   |
                   newCurrent = [                                                 |
                       [n1, n2]                                               y = 0, x = 1
                   ]                                                              |
                                                                                   V
               ----- y = 0, x = 2 ---------------------------------------------
                                                                                   |
                   ...                                                        y = 0, x = 2
                                                                                   |
                                                                                   V
                                                                                   
               ----- y = 0, x = 3 ---------------------------------------------
                                                                                   |
                   ...                                                        y = 0, x = 3
                                                                                   |
                                                                                   V
               . . . . .. . . . .. . . . .. . . . .. . . . .
               
               {{ 処理の流れ }}
               → 外ループ y = 0
                   → 内ループ y = 0, x = 0→1→2→3
               → 外ループ y = 1
                   → 内ループ y = 1, x = 0→1→2→3
                   
               ---------------------------------------------------------------------
       
       }
   }
       
       --------------------------------
           newCurrent = [
               [n1, n2, n3, n4]
               [o1, o2, o3, o4]
               [p1, p2, p3, p4]
               [q1, q2, q3, q4]
           ]
       --------------------------------
       
       
 
 
   return newCurrent;
}
```
2 見やすいよう コード修正

退会済みユーザー

退会済みユーザー

2019/06/12 14:02  投稿

ループ処理がどのように行われるか、**実際に値を代入し処理を追ってみる**と分かりやすいと思います。僕も分からなくなった時は、「順番にプロセスを追ってみる」事で理解できる事がよくあります。
```js
var newCurrent = [];
for ( var y = 0; y < 4; ++y ) {
   newCurrent[ y ] = [];
   
     
       ----- y = 0 ------------------------------
       
            newCurrent = [
               []   <== newCurrent[0] に [] を追加;
            ]
       --------------------------------------------
                       |
                       |
                       V
                       
       for ( var x = 0; x < 4; ++x ) {
           newCurrent[ y ][ x ] = current[ 3 - x ][ y ];
           
           
               ----- y = 0, x = 0 ---------------------------------------------
                   newCurrent[0][0] = current[3][0]                               |  
                                                                                   |
                   newCurrent = [                                                 |
                       [n1] <== newCurrent[0][0] に current[3][0] を追加         |
                       [n1]                                                     |
                   ]                                                          y = 0, x = 0
                                                                                   |
                       {{ current[3][0]が 恐らく数値だと思われるため、            |
                           ある数値をn1と表記して代入 }}                          |
                                                                                   V
               ----- y = 0, x = 1 ---------------------------------------------
                   newCurrent[0][1] = current[2][0]                               |  
                                                                                   |
                   newCurrent = [                                                 |
                   [n1, n2]  <== newCurrent[0][1] に current[3][1] を追加    y = 0, x = 1
                      [n1, n2]                                              y = 0, x = 1
                   ]                                                              |
                                                                                   V
               ----- y = 0, x = 2 ---------------------------------------------
                                                                                   |
                   ...                                                        y = 0, x = 2
                                                                                   |
                                                                                   V
                                                                                   
               ----- y = 0, x = 3 ---------------------------------------------
                                                                                   |
                   ...                                                        y = 0, x = 3
                                                                                   |
                                                                                   V
               . . . . .. . . . .. . . . .. . . . .. . . . .
               
               {{ 処理の流れ }}
               → 外ループ y = 0
                   → 内ループ y = 0, x = 0→1→2→3
               → 外ループ y = 1
                   → 内ループ y = 1, x = 0→1→2→3
                   
               ---------------------------------------------------------------------
       
       }
   }
       
       --------------------------------
           newCurrent = [
               [n1, n2, n3, n4]
               [o1, o2, o3, o4]
               [p1, p2, p3, p4]
               [q1, q2, q3, q4]
           ]
       --------------------------------
       
       
 
 
   return newCurrent;
}
```
1 コード修正

退会済みユーザー

退会済みユーザー

2019/06/12 13:56  投稿

ループ処理がどのように行われるか、**実際に値を代入し、処理を追ってみると分かりやすい**かと思います。僕も分からなくなった時は、「実際に値を代入して順番にプロセスを追ってみる」事で理解できる事がよくあります。
(テキストが回り込み見にくいと思うので、テキストエディタにコピペして見られる事推奨です🙌)
ループ処理がどのように行われるか、**実際に値を代入し処理を追ってみる**と分かりやすいと思います。僕も分からなくなった時は、「順番にプロセスを追ってみる」事で理解できる事がよくあります。
```js
var newCurrent = [];
for ( var y = 0; y < 4; ++y ) {
   newCurrent[ y ] = [];
   
     
       /*--- y = 0 ------------------------------
       ----- y = 0 ------------------------------
       
            newCurrent = [
               []   <== newCurrent[0] に [] を追加;
            ]
       -------------------------------------------*/
       --------------------------------------------
                       |
                       |
                       V
                       
       for ( var x = 0; x < 4; ++x ) {
           newCurrent[ y ][ x ] = current[ 3 - x ][ y ];
           
           
               /*--- y = 0, x = 0 ---------------------------------------------
               ----- y = 0, x = 0 ---------------------------------------------
                                                                                   |
                   newCurrent = [                                                 |
                       [n1] <== newCurrent[0][0] に current[3][0] を追加         |
                   ]                                                          y = 0, x = 0
                                                                                   |
                       {{ current[3][0]が 恐らく数値だと思われるため、            |
                           ある数値をn1と表記して代入 }}                          |
                                                                                   V
               ----- y = 0, x = 1 ---------------------------------------------
                                                                                   |
                   newCurrent = [                                                 |
                   [n1, n2]  <== newCurrent[0][1] に current[3][1] を追加    y = 0, x = 1
                   ]                                                              |
                                                                                   V
               ----- y = 0, x = 2 ---------------------------------------------
                                                                                   |
                   ...                                                        y = 0, x = 2
                                                                                   |
                                                                                   V
                                                                                   
               ----- y = 0, x = 3 ---------------------------------------------
                                                                                   |
                   ...                                                        y = 0, x = 3
                                                                                   |
                                                                                   V
               . . . . .. . . . .. . . . .. . . . .. . . . .
               
               {{ 処理の流れ }}
               → 外ループ y = 0
                   → 内ループ y = 0, x = 0→1→2→3
               → 外ループ y = 1
                   → 内ループ y = 1, x = 0→1→2→3
                   
               ------------------------------------------------------------------*/
               ---------------------------------------------------------------------
       
       }
   }
       
       /*------------------------------
       --------------------------------
           newCurrent = [
               [n1, n2, n3, n4]
               [o1, o2, o3, o4]
               [p1, p2, p3, p4]
               [q1, q2, q3, q4]
           ]
       --------------------------------*/
       --------------------------------
       
       
 
 
   return newCurrent;
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る