回答編集履歴

1

修正

2019/03/26 09:34

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -4,29 +4,43 @@
4
4
 
5
5
  - 細かいですが空配列は`[]`を使って宣言しましょう。
6
6
 
7
- - for文中身ifとelse同じ事やってすね。
7
+ - ループ継続条件一目読み取れるようにししょう、詳しくは後述
8
8
 
9
- これはダサいので共通化しましょう、詳しくは後述
9
+ - for文の中身ifとelseで同じ事やってますね。ダサいので共通化しましょう、詳しくは後述
10
-
11
- - array1.lengthをfor文のループ回数として利用していますが、
12
-
13
- array1がfor文の中身でどんどん要素が削れていくので、
14
-
15
- 綺麗汚い以前にこれは挙動としておかしいのでダメです。
16
-
17
- - forなのにnもiも殆ど使っていませんね、だったらwhile文の方が良いでしょう
18
10
 
19
11
 
20
12
 
21
- if文の分岐を読み解きましたが、
13
+ for文の第二節はループの継続条件です。
22
14
 
23
- `[1, 2].splice(0, 3)`がエラーのを懸念しているのでしょうか?
15
+ 質問文では変数nの数値が0から始まり、変数iを超えた場合に終了ると書かれています。
16
+
17
+ array1の要素数は11なので、100人のエンジニアに読ませれば全員が「ああ、この場面では11回ループを回したいのね」と判断をするでしょう。
24
18
 
25
19
 
26
20
 
21
+ 実際にやってる事はガンガンarray1の要素数が取り除かれて、
22
+
23
+ 要素数が2以下になったら突如`i = 0`が実行されてループが切れます。
24
+
25
+ `i = 0`にするくらいなら[break文](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/break)使えよとなるのですが
26
+
27
+ そもそも11回ループを回すと書かない方が良いです。
28
+
29
+
30
+
31
+ また、if文の中身は`[1, 2].splice(0, 3)`がエラーを出すのを懸念しているのでしょうか?
32
+
27
33
  これの結果は元気に`[1, 2]`を返しますし、元の配列は空配列になります。
28
34
 
29
- つまりif文による分岐は無駄です。
35
+ つまりif文による分岐は不要です。
36
+
37
+
38
+
39
+ この辺の事情から変数i,nをそもそも使わず、
40
+
41
+ array1をガンガン削りますよという宣言の元、
42
+
43
+ `array1.length != 0`みたいな式に変更した方がわかりやすくなるでしょう。
30
44
 
31
45
 
32
46