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

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

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

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

JavaScript

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

Q&A

解決済

1回答

1801閲覧

vue.js computedにてオブジェクトデータを配列にしたい

holic

総合スコア134

Vue.js

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

JavaScript

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

0グッド

0クリップ

投稿2019/01/05 13:53

前提・実現したいこと

vue.js computedにてオブジェクトデータを配列にしたい。

###やろうとしていること

  • jsonデータをaxiosで取得して、dataのallsに格納(成功)
  • computedを使って、取得したallsのうち、日程表のデータをdatesに格納する。(成功)
  • datesにはオブジェクトデータが格納されております。


{
2019/03/08:{...}
2019/03/09:{...}
2019/03/10:{...}
2019/03/11:{...}
}

このオブジェクトのキーを「値」として配列に直したい。←←←←←ここにはまっております。

//datesに格納されているオブジェクト { 2019/03/08:{...} 2019/03/09:{...} 2019/03/10:{...} 2019/03/11:{...} } //配列に変換したい ↓↓↓↓↓↓↓↓↓↓↓↓ [2019/03/08,2019/03/09,2019/03/10,2019/03/11]

###実際のソース

js

1 var vm = new Vue({ 2 el: '#test1', 3 data: function () { 4 return { 5 //全てのjsonデータを格納 6 alls: [], 7 } 8 }, 9 methods: { 10 //json情報の取得(非同期処理) 11 getPosts: function () { 12 var _this = this; 13 14 axios.get('https://example/api/event?shop_id=108') 15 .then(function (response) { 16 _this.alls = response.data.contents[0]; 17 }) 18 .catch(function (error) { 19 window.alert(error); 20 }); 21 }, 22 }, 23 computed: { 24 //allsの中から日程表だけ 25 dates: function () { 26 return this.alls.date; 27 }, 28 //配列にしたい 29 monthfirsts: function () { 30 this.dates; 31 Object.keys(this.dates).map(function (key) { 32 return this.dates[key]; 33 }); 34 }, 35 }, 36 37 })

試したこと

参考記事をもとにオブジェクトを配列変換するObject.keys(elements).mapを使用したのですが、なぜかmapされず、「error during evaluation」とdevtoolでは反応をしてしまいます。

####試したことその②
Vue.jsは気難しい(オブジェクト編)をみましたら、
this.$setをすればよいのかと思いましたが、うまく動かず。ドツボにはまっております。

vueでのobjectの取り扱いに苦労しております。
vue.jsに詳しい方がいらっしゃいましたら、ご教示をお願い致します。
よろしくお願いいたします。

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

vue.js 2.5.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

日付の情報がそもそも datesオブジェクト の key になってるので、Object.keys だけで十分かと思います。
this.dates が存在するかどうかもちゃんとチェックした方が良いでしょう。

//配列にしたい monthfirsts: function () { if (!this.dates) { return []; } return Object.keys(this.dates); },

投稿2019/01/05 17:08

編集2019/01/05 17:09
tell_k

総合スコア2120

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

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

holic

2019/01/06 07:54

tell_k様 ご回答ありがとうございます。 上記で解決しました。 ベストアンサーとさせてください。 基本的なことをご質問させてください。 if (!this.dates) { return []; } もしjson取得に失敗した場合は↑の記述が活きてくると思います、 この場合はreturn []で終了をして、 下の return Object.keys(this.dates);は実行されないという認識でよいのでしょうか。 return はそのfunction実行を途中で抜けるという意味ととらえてよいのでしょうか。 ※本題とは外れた内容になってしまって失礼足します。
tell_k

2019/01/06 10:25

はい。こちらの認識であってます。 > この場合はreturn []で終了をして、下の return Object.keys(this.dates);は実行されない
holic

2019/01/06 10:27

追記の質問についてもご回答ありがとうございます。 より理解が深まりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問