回答編集履歴
1
修正
test
CHANGED
@@ -4,29 +4,43 @@
|
|
4
4
|
|
5
5
|
- 細かいですが空配列は`[]`を使って宣言しましょう。
|
6
6
|
|
7
|
-
-
|
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
|
-
|
13
|
+
for文の第二節はループの継続条件です。
|
22
14
|
|
23
|
-
|
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
|
|