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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

808閲覧

勝手に上書きされてしまいます

daitai001

総合スコア1

Vue.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/10/14 21:41

前提・実現したいこと

当方、JS初学者です。
vue.jsを使ってアプリを開発しており、

①配列を参照→
②参照した配列から、条件を基に新たな配列を作る→
③その配列内のデータを基に別の配列からデータを持ってきて、置き換える

というシステムを作成しようとしていたのですが、③の時点で何故か参照基のデータまで勝手に置き換わってしまいます。

半日ほどかけても解決に至らず途方に暮れています。。。
問題解決にお力添え頂けますと幸いです。

発生している問題・エラーメッセージ

上記の通りです

該当のソースコード

javascript

1 2 const ptdatafiltered = this.pts.filter((included) => { 3 return ( included.m1 === this.temp.name || included.m2 === this.temp.name || included.m3 === this.temp.name || included.u1 === this.temp.name || included.u2 === this.temp.name || included.u3 === this.temp.name ); 4 }); 5 6 this.temppt1.splice(0,100000,ptdatafiltered) 7 8 this.lengthincludedpt = this.temppt1.length 9 10 for (let i = 0; i < this.lengthincludedpt; i++) { 11 this.temppt1[i].m1 = this.charactors.filter((included) => { return ( included.name === this.temppt1[i].m1 );}); 12 this.temppt1[i].m2 = this.charactors.filter((included) => { return ( included.name === this.temppt1[i].m2 );}); 13 this.temppt1[i].m3 = this.charactors.filter((included) => { return ( included.name === this.temppt1[i].m3 );}); 14 this.temppt1[i].u1 = this.charactors.filter((included) => { return ( included.name === this.temppt1[i].u1 );}); 15 this.temppt1[i].u2 = this.charactors.filter((included) => { return ( included.name === this.temppt1[i].u2 );}); 16 this.temppt1[i].u3 = this.charactors.filter((included) => { return ( included.name === this.temppt1[i].u3 );}); 17 this.temppt1[i].w1 = this.weapons.filter((included) => { return ( included.name === this.temppt1[i].w1 );}); 18 this.temppt1[i].w2 = this.weapons.filter((included) => { return ( included.name === this.temppt1[i].w2 );}); 19 this.temppt1[i].w3 = this.weapons.filter((included) => { return ( included.name === this.temppt1[i].w3 );}); 20 this.temppt1[i].a1 = this.weapons.filter((included) => { return ( included.name === this.temppt1[i].a1 );}); 21 this.temppt1[i].a2 = this.weapons.filter((included) => { return ( included.name === this.temppt1[i].a2 );}); 22 this.temppt1[i].a3 = this.weapons.filter((included) => { return ( included.name === this.temppt1[i].a3 );}); 23 this.temppt1[i].number = i 24 } 25

試したこと

pts → 絞り込みを行って、temppt1にデータを送ります。勝手に書き換わる〜と言うのはこちらのデータになります。

代入方法をspliceからpushに変えたり、filterをfindに変えてみても上手くいきませんでした。

補足情報(FW/ツールのバージョンなど)

vue 2.6.12

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

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

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

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

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

guest

回答2

0

ベストアンサー

まずその処理でspliceを使用する必要はないのでは?
(splice(0, 100000)は中身を一旦全消ししたい処理であるという予想)

本題ですが
その書き方だと同じ参照を持ったままになるので片方を変えるともう片方も変わってしまいます
Json文字列を挟んでオブジェクトを作り直すコピーをするといいと思います

JavaScript

1this.temppt1 = JSON.parse(JSON.stringify( ptdatafiltered ));

投稿2020/10/15 04:30

編集2020/10/15 04:57
q_sane_q

総合スコア610

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

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

daitai001

2020/10/15 22:48

ご回答ありがとうございます! こちらの方法でも無事解決いたしました! 本当に助かりました????
guest

0

spliceは結果を戻り値で返すので、それを受け取っていないだけではないでしょうか。

typescript

1this.temppt1.splice(0,100000,ptdatafiltered) 2↓結果を変数で受け取る 3this.temppt1 = this.temppt1.splice(0,100000,ptdatafiltered)

投稿2020/10/15 03:39

編集2020/10/15 03:40
storm3

総合スコア330

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

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

daitai001

2020/10/15 22:48

ありがとうございます! こちらの方法で無事解決いたしました。 本当に助かりました????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問