92867


`array_1` の一次元配列を二つの要素ごとに区切って `array_2` に二次元配列として格納するプログラムの例をネットで見つけました。

出典：  
[一次元配列を二次元配列に変換する](https://tetsuooo.net/gas/2581/)

以下のようなプログラムなんですが、なぜ `for` 文の条件式は `(let i = 0; 0 < array_1.length; i)`
このようになるのでしょうか？

[code]

    //要素数2の場合
    
    let array_1 = ['ハンバーグ', 'スープ', 'カレー', 'シチュー,', 'スパゲッティ','オムライス'];
    let array_2 = [];
    
    let numOfElements = 2;
    
    for(let i = 0; 0 < array_1.length; i){
      array_2.push(array_1.splice(i, numOfElements));
    }
    
    console.log(array_2); // [ [ 'ハンバーグ', 'スープ' ], [ 'カレー', 'シチュー,' ], [ 'スパゲッティ', 'オムライス' ] ]
    
[/code]


CC BY-SA 4.0
2022-12-18T03:37:57.620
92858
2022-12-18T09:51:20.743
2022-12-18T09:51:20.743
3060
56059
question
javascript google-apps-script
一次元配列を二次元配列に変換するプログラムのfor文の処理について


for 文の第二引数の`array_1.length` に、評価値を入れてみるとわかりやすいかと思います。

ループ1回目、`for(let i = 0; 0 < 6; i)`  
ループ2回目、`for(let i = 0; 0 < 4; i)`  
ループ3回目、`for(let i = 0; 0 < 2; i)`  
ループ4回目、`for(let i = 0; 0 < 0; i)` => 第二引数の条件を満たさないため実行されない

for 文のブロック内で、`array_1.splice(0, 2)`が実行されているので、その度に `array_1` の length
が変更し、上記のように第二引数が変更していきます。

補足ですが、この例では、第一引数と第三引数はあってないようなものなので、以下のように省略してしまっても同じ結果が得られます。(`splice()`
の第一引数として、 `i` を使っているので、 `0` に変更する必要あり）

[code]

    for (; 0 < array_1.length;) {
      array_2.push(array_1.splice(0, numOfElements));
    }
    
[/code]

参照：  
MDN for:
<https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for>  
MDN splice:
<https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/splice>


CC BY-SA 4.0
2022-12-18T07:03:18.440
92867
2022-12-18T07:11:34.610
2022-12-18T07:11:34.610
53321
53321
92858
answer