回答編集履歴

3

もとの質問文を参考に、書き直した版を追記。

2019/09/29 15:03

投稿

tanishi_a
tanishi_a

スコア484

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- これだと重複してしまうので、以下のように順番に取り出せば良いと思います。
75
+ これだと重複してしまうのと、既にシャッフルしてあるようなので、以下のように順番に取り出せば良いと思います。
76
76
 
77
77
 
78
78
 
@@ -100,4 +100,104 @@
100
100
 
101
101
  ※ それから 本質とは関係ない補足ですが、
102
102
 
103
+
104
+
103
105
  関数名ですが ```rand()``` は乱数を返す関数に見えてしまうので、別の名前にしたほうが良いと思いました。 なんでもいいですが、 ```getRandomCombinations()``` とか。 ```stimu``` も何だかわからないですが。
106
+
107
+
108
+
109
+
110
+
111
+ それと、タイトルの「再帰呼び出し」は関係ないように思います。
112
+
113
+
114
+
115
+ ・・・
116
+
117
+
118
+
119
+ ### さらに追記
120
+
121
+
122
+
123
+ もとのコードを見るに、書きたかったのは、こういうことだったかも?
124
+
125
+
126
+
127
+ ```js
128
+
129
+ //main関数
130
+
131
+ function main() {
132
+
133
+ var endList = [];
134
+
135
+
136
+
137
+ endList.push(rand());
138
+
139
+ endList.push(rand());
140
+
141
+ console.log(endList);
142
+
143
+ }
144
+
145
+
146
+
147
+
148
+
149
+ //ランダムな値を取得
150
+
151
+ function rand() {
152
+
153
+ var movieList = [0, 1, 2, 3, 4, 5, 6];
154
+
155
+
156
+
157
+ // 組み合わせの用意
158
+
159
+ var movieComb = [];
160
+
161
+ for (var i = 0; i < movieList.length; i++) {
162
+
163
+ for (var j = 0; j < movieList.length; j++) {
164
+
165
+ if (movieList[i] !== movieList[j]) {
166
+
167
+ movieComb.push([movieList[i], movieList[j]]);
168
+
169
+ }
170
+
171
+ }
172
+
173
+ }
174
+
175
+
176
+
177
+ // シャッフルする
178
+
179
+ for (var i = movieComb.length - 1; i > 0; i--) {
180
+
181
+ var r = Math.floor(Math.random() * (i + 1));
182
+
183
+ var tmp = movieComb[i];
184
+
185
+ movieComb[i] = movieComb[r];
186
+
187
+ movieComb[r] = tmp;
188
+
189
+ }
190
+
191
+
192
+
193
+ // 取り出す
194
+
195
+ return movieComb[Math.floor(Math.random() * movieComb.length)];
196
+
197
+ }
198
+
199
+
200
+
201
+ main();
202
+
203
+ ```

2

関数名/変数名について補足を書いた

2019/09/29 15:03

投稿

tanishi_a
tanishi_a

スコア484

test CHANGED
@@ -91,3 +91,13 @@
91
91
  }
92
92
 
93
93
  ```
94
+
95
+
96
+
97
+ ・・・
98
+
99
+
100
+
101
+ ※ それから 本質とは関係ない補足ですが、
102
+
103
+ 関数名ですが ```rand()``` は乱数を返す関数に見えてしまうので、別の名前にしたほうが良いと思いました。 なんでもいいですが、 ```getRandomCombinations()``` とか。 ```stimu``` も何だかわからないですが。

1

一部(③)にしか回答していなかったので、追記。

2019/09/29 14:45

投稿

tanishi_a
tanishi_a

スコア484

test CHANGED
@@ -33,3 +33,61 @@
33
33
 
34
34
 
35
35
  ①②は読んだら追記します。
36
+
37
+
38
+
39
+ ## 以下、追記
40
+
41
+
42
+
43
+ ③については、
44
+
45
+ rand 関数内の ```// 取り出す``` 以下は不要で、```return movieComb;``` したらいいと思います
46
+
47
+
48
+
49
+ ①②については、
50
+
51
+
52
+
53
+ やろうとしてることは、こういうことだと思いますが、
54
+
55
+
56
+
57
+ ```
58
+
59
+ function main(stimu) {
60
+
61
+ var endList = [];
62
+
63
+ endList.push(stimu[Math.floor(Math.random() * stimu.length)]);
64
+
65
+ endList.push(stimu[Math.floor(Math.random() * stimu.length)]);
66
+
67
+ console.log(endList);
68
+
69
+ }
70
+
71
+ ```
72
+
73
+
74
+
75
+ これだと重複してしまうので、以下のように順番に取り出せば良いと思います。
76
+
77
+
78
+
79
+ ```js
80
+
81
+ function main(stimu) {
82
+
83
+ var endList = [];
84
+
85
+ endList.push(stimu[0]);
86
+
87
+ endList.push(stimu[1]);
88
+
89
+ console.log(endList);
90
+
91
+ }
92
+
93
+ ```