🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

JavaScript

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

Q&A

解決済

2回答

1745閲覧

map関数が「cannot read 」と言われて困っています

sohh

総合スコア6

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

JavaScript

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

0グッド

0クリップ

投稿2021/02/11 13:54

【エラー内容】
TypeError: Cannot read property 'map' of undefined
at VueComponent.eval (Weather.vue?e729:61)

mapを使って値をdataに代入していたのですが、エラーが出ました。原因がわかる方いらっしゃいますか?
なにか簡単なことだとは思うのですが、時間が取られてしまい、質問させていただきました。

Vueファイル

1<template> 2 <b-container class="text-center"> 3 <div class="my-5"> 4 <h1 class="mb-3">天気情報</h1> 5 <select v-model="woeid" @change="getWeather"> 6 <option disabled value="">天気を見たい都市を指定してください</option> 7 <option value="1118370">Tokyo</option> 8 <option value="15015370">Osaka</option> 9 <option value="1117817">Nagoya</option> 10 </select> 11 </div> 12 13 <b-row cols="3" cols-sm="4" cols-md="6" cols-lg="7"> 14 <b-col v-for="info of infos" v-bind:key="info.date"> 15 <p>{{ info.date }}</p> 16 <p>{{ info.max_temp | roundUp }}°C</p> 17 <p>{{ info.wind }}</p> 18 <p>{{ info.weather_state }}</p> 19 <img v-bind:src="info.image_url" /> 20 </b-col> 21 </b-row> 22 </b-container> 23</template> 24 25<script> 26import axios from "axios"; 27 28export default { 29 data() { 30 return { 31 woeid: null, 32 infos: [], 33 }; 34 }, 35 methods: { 36 getWeather: function () { 37 // 配列ymdに前後1週間の日付を代入 38 var ymd = [-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6].map((value) => { 39 var dt = new Date(); 40 dt.setDate(dt.getDate() + value); 41 var y = dt.getFullYear(); 42 var m = ("00" + (dt.getMonth() + 1)).slice(-2); 43 var d = ("00" + dt.getDate()).slice(-2); 44 return "/" + y + "/" + m + "/" + d + "/"; 45 }); 46 47 var getDataUrl = ymd.map((num) => { 48 return ( 49 "https://********.herokuapp.com/https://www.metaweather.com/api/location/" + 50 this.woeid + 51 num 52 ); 53 }); 54 55 axios 56 .get(getDataUrl) 57 .then( 58 function (response) { 59 this.infos = response.data.consolidated_weather.map((weather) => { 60 return { 61 date: weather.applicable_date, //日付 62 max_temp: weather.max_temp, //最高気温 63 wind: weather.wind_direction_compass, //風向き 64 weather_state: weather.weather_state_name, //天候 65 image_url: 66 "https://www.metaweather.com/static/img/weather/ico/" + 67 weather.weather_state_abbr + 68 ".ico", //天気画像 69 }; 70 }); 71 }.bind(this) 72 ) 73 .catch(function (error) { 74 console.log(error); 75 }); 76 }, 77 }, 78 filters: { 79 roundUp(value) { 80 return Math.ceil(value); 81 }, 82 }, 83}; 84</script> 85 86<style> 87p { 88 margin: 5px; 89} 90</style>

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

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

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

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

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

guest

回答2

0

おそらく

js

1this.infos = response.data.consolidated_weather.map((weather) => {

の部分なのでしょう。
Cannot read property 'map' of undefinedですから、response.data.consolidated_weather が undefined かと。

投稿2021/02/11 14:11

shiketa

総合スコア4054

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

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

0

自己解決

APi取得のパスが間違えておりました。。。
解決しました

投稿2021/02/11 14:07

sohh

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問