teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

source追加

2019/02/05 07:21

投稿

退会済みユーザー
answer CHANGED
@@ -17,4 +17,18 @@
17
17
 
18
18
 
19
19
  最後にコピーするのが手っ取り早いと思います。
20
+ ```javascript
21
+ methods: {
22
+ goShuffle() {
23
+ console.log("実行されているかの確認")
24
+ for (var i = this.list.length - 1; i >= 0; i--) {
25
+ // 0~iのランダムな数値を取得
26
+ var rand = Math.floor( Math.random() * ( i + 1 ) );
27
+ // 配列の数値を入れ替える
20
- this.list = [...this.this.list]
28
+ [this.list[i], this.list[rand]] = [this.list[rand], this.list[i]]
29
+ }
30
+
31
+ this.list = [].concat(this.list); // もしくは this.list = [...this.list];
32
+ }
33
+ },
34
+ ```

3

typo

2019/02/05 07:21

投稿

退会済みユーザー
answer CHANGED
File without changes

2

typo

2019/02/05 05:13

投稿

退会済みユーザー
answer CHANGED
@@ -16,5 +16,5 @@
16
16
  詳しくは[配列の変化を検出](https://jp.vuejs.org/v2/guide/list.html#%E9%85%8D%E5%88%97%E3%81%AE%E5%A4%89%E5%8C%96%E3%82%92%E6%A4%9C%E5%87%BA)読んでください。
17
17
 
18
18
 
19
- 最後にコピーを値するのが手っ取り早いと思います。
19
+ 最後にコピーするのが手っ取り早いと思います。
20
20
  this.list = [...this.this.list]

1

2個質問があったので修正

2019/02/05 05:13

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,20 @@
1
+ ### goShuffleが定義されていないとエラーが出てしまう
2
+
1
3
  > goShuffle()
2
4
 
3
5
  thisが抜けているため、グローバルにgoShuffle関数を探しに行くも見つからずエラーになっています。
4
- this.goShuffle()としてください。
6
+ this.goShuffle()としてください。
7
+
8
+ ### 配列をランダムに並び替える
9
+
10
+ > [this.list[i], this.list[rand]] = [this.list[rand], this.list[i]]
11
+
12
+ 通常これで配列は入れ替わります。
13
+ しかしながら、Vueは配列の添字による変更を検知できません。
14
+ そのため、listの状態と描画の状態が一致しない状態になります。
15
+
16
+ 詳しくは[配列の変化を検出](https://jp.vuejs.org/v2/guide/list.html#%E9%85%8D%E5%88%97%E3%81%AE%E5%A4%89%E5%8C%96%E3%82%92%E6%A4%9C%E5%87%BA)読んでください。
17
+
18
+
19
+ 最後にコピーを値するのが手っ取り早いと思います。
20
+ this.list = [...this.this.list]