質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Q&A

解決済

1回答

751閲覧

【Vue.js】配列の回転が一度しかできないです。

yyk

総合スコア11

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

0グッド

0クリップ

投稿2021/06/18 05:11

編集2021/06/18 05:17

やりたいこと

現在配列の回転を実装したいと思っています。
そこで以下のコードを書いたのですが、1回転はするが、1度回転するとそれ以降はボタンを押しても回らずにずっと1回転した配列の状態になってしまっています。
なので、どうにか押すたびに回転させることはできないかヒントのみでも助かりますのでご教授お願いしたいです。

現在のコード

html

1<template> 2 <div id="app"> 3 <table> 4 <tr 5 v-for="(chooseBlockRow, vi) in chooseBlock" 6 :key="vi"> 7 <td 8 class="blockCell2" 9 v-for="(chooseBlockCell, mi) in chooseBlockRow" 10 :key="mi" 11 :class="`is-${chooseBlockCell.code}`"> 12 </td> 13 </tr> 14 </table> 15 <div> 16 <button @click.prevent @click="turnLeft()">左に1回転</button> 17 </div> 18 </div> 19</template>

vue

1export default { 2 name: 'App', 3 data (){ 4 const blocks = [ 5 { name:0, 6 data:[ 7 [{code:1}, {code:0}, {code:0}, {code:0}, {code:0}], 8 [{code:0}, {code:0}, {code:0}, {code:0}, {code:0}], 9 [{code:0}, {code:0}, {code:0}, {code:0}, {code:0}], 10 [{code:0}, {code:0}, {code:0}, {code:0}, {code:0}], 11 [{code:0}, {code:0}, {code:0}, {code:0}, {code:0}], 12 ]}, 13 { name:1, 14 data:[ 15 [{code:1}, {code:0}, {code:0}, {code:0}, {code:0}], 16 [{code:1}, {code:0}, {code:0}, {code:0}, {code:0}], 17 [{code:0}, {code:0}, {code:0}, {code:0}, {code:0}], 18 [{code:0}, {code:0}, {code:0}, {code:0}, {code:0}], 19 [{code:0}, {code:0}, {code:0}, {code:0}, {code:0}], 20 ]}, 21 ]; 22 const chooseBlock = []; 23 for (let y = 0; y < 5; y++ ) { 24 const chooseBlockRow = [] 25 for (let x = 0; x < 5; x++){ 26 const chooseBlockCell = { 27 y: y, 28 x: x, 29 code: 0, 30 }; 31 chooseBlockRow.push(chooseBlockCell) 32 } 33 chooseBlock.push(chooseBlockRow) 34 } 35 36 return{ 37 blocks:blocks, 38 haveItem: [], 39 chooseBlock: chooseBlock, 40 }; 41 }, 42 methods:{ 43 turnLeft(){ 44 this.haveItem = this.blocks[0].data 45 for (let i = 0; i < 5; i++) { 46 for (let j = 0; j < 5; j++) { 47 this.chooseBlock[4 - i][j].code = this.haveItem[j][i].code 48 } 49 } 50 }, 51 }

試したこと

returnにもう一つデータの保存用に空のデータを作り、そこに完成したデータを入れるようにしてみましたが、クリックイベントが発動したタイミングで読み込むデータを変えれずに同じ形にしか成りませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

毎回「最初の状態」をもとに反時計回りに90度回転した状態を算出しているので、最初の状態から90度回転した結果にしかなりません。
回転させた結果を元に90度回転した状態を算出してください。

javascript

1 data (){ 2 3 // (省略) 4 5 return{ 6 blocks:blocks, 7 haveItem: [], 8 chooseBlock: blocks[0].data, // 最初の状態を設定 9 }; 10 }, 11 methods:{ 12 turnLeft(){ 13 this.haveItem = JSON.parse(JSON.stringify(this.chooseBlock)) // 回転させた結果を元にする 14 for (let i = 0; i < 5; i++) { 15 for (let j = 0; j < 5; j++) { 16 this.chooseBlock[4 - i][j].code = this.haveItem[j][i].code 17 } 18 } 19 }, 20 }

投稿2021/06/18 05:56

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yyk

2021/06/18 06:30

原因と考え方をわかりやすく教えていただきありがとうございます!! コードの書き方も知らなかったので視野も広がりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問