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

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

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

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

JavaScript

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

Q&A

解決済

1回答

967閲覧

Javascript(vue.js)で、配列のデータを指定して取り出したい

umino

総合スコア54

Vue.js

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

JavaScript

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

0グッド

0クリップ

投稿2021/05/09 11:59

編集2021/05/09 12:18

前提・実現したいこと

javascript(vue.js)で、とある配列の中のデータを取得したいです。
お詳しい方、ご教示お願いできませんでしょうか。

該当のソースコード

res.images.positionが最小値のimage_pathを取得したいです。

vue

1<template> 2<!-- res[]の中にはid,images[]が存在する。 --> 3<!-- images[]の中のpositionが最小値のimage_pathを取り出したい。 --> 4<div v-for="r in res" :key="res.id"> 5 {{ r.images[Math.min(Number(r.images.position))].image_path }} 6 <!-- 期待する結果: "https://hoge.png" --> 7 <!-- 実際の結果: Cannot read property 'image_path' of undefined --> 8 <hr> 9</div> 10</template> 11 12<script> 13export default { 14data() { 15 return { 16 res: [ 17 { 18 id: 1, 19 images: [ 20 { 21 position: 0, 22 image_path: "https://hoge.png" //positionが最小値なので、これを取り出したい 23 }, 24 { 25 position: 1, 26 image_path: "https://fuga.png" 27 }, 28 ], 29 }, 30 { 31 id: 2, 32 images: [ 33 { 34 position: 5, 35 image_path: "https://piyo.png" //positionが最小値なので、これを取り出したい 36 }, 37 ], 38 }, 39 ] 40 } 41} 42methods: { 43 getImagePathByMinPosition() { 44 // 作成すべき? 45 }, 46</script>

上記で試してみたのですがCannot read property 'image_path' of undefinedエラーになってしまい、思う結果が得られませんでした。
methodを定義すべきか(作成しなくて済むものか、作成しないと叶わないのか)も、勘所がわからず...
申し訳ないのですが、お詳しい方、ご教示願えませんでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Vueは詳しくないので、望むような回答でなければ申し訳ないのですが、たとえばこうするとどうですか?
{{ ( min = Math.min(...r.images.map(x => x.position)), r.images.filter( e => (e.position === min) )[0].image_path ) }}

投稿2021/05/10 00:56

Lhankor_Mhy

総合スコア36960

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

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

umino

2021/05/10 11:25

Lhankor_Mhyさん さっそくのご回答、ありがとうございます。 教えていただいたように実行したところ、無事期待した出力を得ることができました。 他にも同じような挙動をさせたい箇所があるので、メソッドに切り出して使おうと思います。 意味を調べて、応用できるようにします、自分では解決できなかったので、大変助かりました。 ありがとうございました。
Lhankor_Mhy

2021/05/11 00:40

お役に立てたようで何よりです。 Vueは詳しくないのですが、computed を使った方がいいのかもしれないですね。
umino

2021/05/13 23:47

コメント気づくの遅れすみません、 確かにcomputedに切り出した方が使いやすいかな、と思い(いくつかの場所で同じ処理をしたいのもあり)、切り出しました。 おかげさまでtemplateがスッキリしました。 ご丁寧に、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問