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

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

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

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

Q&A

解決済

1回答

2889閲覧

vue.jsで、連想配列の中身の合計を算出したい

fork_

総合スコア43

Vue.js

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

0グッド

0クリップ

投稿2020/06/17 14:03

家計簿アプリを作成中です。
連想配列incomesの、お金の部分(income.imとしています)を合計した値を出したいのですが、うまくいきません。
「vue 連想配列 合計」等で調べて、reduce関数を用いてcomputedに処理を書いたのですが、income.imがただ並べられて表示されてしまいます。
どこが間違っているのかいまいちわからない状態です。
ご教示のほど、よろしくお願い致します。

vue

1<template> 2 <div id="app"> 3 <header>ヘッダー</header> 4 <div class="container"> 5 <main> 6 <h2>収支</h2> 7 {{sum}} 8 <p>????年??月収支</p> 9 <hr /> 10 <p>収入 ????円</p> 11 <p>支出 ????円</p> 12 <h1>ここにグラフが入ります</h1> 13 </main> 14 <div class="column"> 15 <div class="right"> 16 <h2>収入</h2> 17 18 <p> 19 日付: 20 <input type="Date" v-model="incomeDate" /> 21 </p> 22 <p> 23 金額: 24 <input type="Number" v-model="incomeMoney" /> 25 </p> 26 <p> 27 名目: 28 <input type="text" v-model="incomeNominal" /> 29 </p> 30 <button @click="addIncome">登録</button> 31 <hr /> 32 <div v-for="income in incomes" :key="income.no"> 33 日付:{{income.id}} 金額:{{income.im}} 名目:{{income.in}} 34 <button 35 @click="deleteIncome(income)" 36 >削除</button> 37 </div> 38 </div> 39 </div> 40 </div> 41 </div> 42</template> 43 44<script> 45export default { 46 data() { 47 return { 48 incomes: [], 49 incomeDate: "", 50 incomeMoney: "", 51 incomeNominal: "", 52 aaa: 0 53 }; 54 }, 55 56 mounted() { 57 if (localStorage.getItem("incomes")) { 58 try { 59 this.incomes = JSON.parse(localStorage.getItem("incomes")); 60 } catch (e) { 61 localStorage.removeItem("incomes"); 62 } 63 } 64 }, 65 methods: { 66 addIncome() { 67 if (this.incomeMoney === "" && this.incomeDate === "") { 68 return; 69 } 70 this.incomes.push({ 71 id: this.incomeDate, 72 im: this.incomeMoney, 73 in: this.incomeNominal 74 }); 75 this.save(); 76 }, 77 deleteIncome(income) { 78 this.incomes.splice(this.incomes.indexOf(income), 1); 79 this.save(); 80 }, 81 82 save() { 83 const a = JSON.stringify(this.incomes); 84 localStorage.setItem("incomes", a); 85 } 86 }, 87 computed: { 88 sum() { 89 const total = this.incomes.reduce((sum, i) => sum + i.im, 0); 90 return total; 91 } 92 } 93}; 94</script> 95 96<style> 97#app { 98 width: 1000px; 99 margin: 0 auto; 100} 101.container { 102 display: flex; 103} 104.column { 105 flex-direction: column; 106} 107main { 108 flex: 1; 109 height: 1000px; 110} 111.right { 112 width: 450px; 113 height: 500px; 114} 115</style>

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

ただ文字列で処理されてるんじゃ?

javascript

1this.incomes.reduce((sum, i) => sum + Number(i.im), 0);

投稿2020/06/17 14:46

sousuke

総合スコア3830

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

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

fork_

2020/06/17 14:49

ありがとうございます!おっしゃる通りでした。。 ちなみなのですが、どのような調べ方をすれば、回答者様の答えに行き着きますでしょうか??
sousuke

2020/06/17 14:59

111+111=222ですが'111'+'111'='111111'っていうのは割と基礎だと思います…。 答えが「222」になると予想し、実際「111111」になっているのを見て「なぜそうなっているのか」を 考えることが大事だと思います。 もう少し突っ込めば私は質問者さんがネットで拾ったreduceを使って合計を出すことに あまり賛成できません。for文使ったりして自分で納得した範囲でコードを書いたほうがいいと思います。
fork_

2020/06/18 02:17

詳細にご説明いただきありがとうございます。 予想外の動きをした時に、焦らず考えることが大事ということですね。。 for文で出す方法も、じっくり考えて実装してみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問