質問編集履歴

1

追記

2019/12/09 02:02

投稿

tkshp
tkshp

スコア174

test CHANGED
File without changes
test CHANGED
@@ -177,3 +177,133 @@
177
177
  もしくはもっと簡潔な組み方はありますか?
178
178
 
179
179
  ご教示お願いします。
180
+
181
+
182
+
183
+ ### 追記 VSCodeでデバッグを繰り返すと、並び順が変わる問題について。
184
+
185
+
186
+
187
+ VSCodeでデバッグを繰り返すと、何故か並び順がたまに変わるという現象が起きました。
188
+
189
+ VSCodeのデバッグでは、
190
+
191
+ console.log(objArray);
192
+
193
+ では、要素のオブジェクトがObjectと表示されるだけで、オブジェクトの中身まで表示されないので、
194
+
195
+ forEachで回して表示させるようにしました。
196
+
197
+
198
+
199
+ ```JavaScript
200
+
201
+ var objArray = [
202
+
203
+ { grade: 'B', number: 2 },
204
+
205
+ { grade: 'S', number: 2 },
206
+
207
+ { grade: 'A', number: 2 },
208
+
209
+ { grade: 'A', number: 3 },
210
+
211
+ { grade: 'B', number: 1 },
212
+
213
+ { grade: 'S', number: 1 },
214
+
215
+ ];
216
+
217
+
218
+
219
+ const compare = (a, b) => {
220
+
221
+
222
+
223
+ if (a.grade !== b.grade) {
224
+
225
+ if (a.grade === 'S') return -1;
226
+
227
+ if (b.grade === 'S') return 1;
228
+
229
+ return a.grade.localeCompare(b.grade);
230
+
231
+ }
232
+
233
+
234
+
235
+ return a.number - b.number;
236
+
237
+ };
238
+
239
+
240
+
241
+ objArray.sort(compare);
242
+
243
+
244
+
245
+ //console.log(objArray);
246
+
247
+
248
+
249
+ objArray.forEach(function( value ) {
250
+
251
+ console.log( value );
252
+
253
+ });
254
+
255
+ ```
256
+
257
+ 上記をデバッグすると、基本的には下記出力となるのですが、
258
+
259
+ ```
260
+
261
+ Object {grade: "S", number: 1}
262
+
263
+ Object {grade: "S", number: 2}
264
+
265
+ Object {grade: "A", number: 2}
266
+
267
+ Object {grade: "A", number: 3}
268
+
269
+ Object {grade: "B", number: 1}
270
+
271
+ Object {grade: "B", number: 2}
272
+
273
+ ```
274
+
275
+ しかし、デバッグを繰り返すと、下記のような出力になることもあります。
276
+
277
+ ```
278
+
279
+ Object {grade: "S", number: 1}
280
+
281
+ Object {grade: "S", number: 2}
282
+
283
+ Object {grade: "B", number: 1}
284
+
285
+ Object {grade: "A", number: 2}
286
+
287
+ Object {grade: "B", number: 2}
288
+
289
+ Object {grade: "A", number: 3}
290
+
291
+ ```
292
+
293
+ 下記のようになったりもしました。
294
+
295
+ ```
296
+
297
+ Object {grade: "S", number: 1}
298
+
299
+ Object {grade: "S", number: 2}
300
+
301
+ Object {grade: "A", number: 2}
302
+
303
+ Object {grade: "B", number: 1}
304
+
305
+ Object {grade: "A", number: 3}
306
+
307
+ Object {grade: "B", number: 2}
308
+
309
+ ```