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

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

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

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

JavaScript

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

Q&A

解決済

1回答

5007閲覧

vueのv-forを使ってリストの一覧を出し、名前が重複ものはまとめて表示させたい

tomato01

総合スコア82

Vue.js

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

JavaScript

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

0グッド

0クリップ

投稿2020/03/06 01:11

編集2020/03/06 01:15

vueのv-forを使ってリストの一覧を出し、名前が重複する都市はまとめ、
さらに重複した分だけ件数を数えて表示させたいと考えております。

Jsonデータ

[ { id:121, city: Osaka } { id:123, city: Fukuoka } { id:425, city: Osaka } { id:645, city: Tokyo } { id:326, city: Osaka } { id:876, city: Tokyo } { id:456, city: Osaka } { id:335, city: Osaka } { id:471, city: Tokyo } { id:345, city: Osaka } { id:857, city: Fukuoka } { id:455, city: Osaka } { id:997, city: Osaka } { id:121, city: Tokyo } { id:115, city: Osaka } { id:668, city: Fukuoka } // 実際はcityの市は100種類以上ある ... ]

HTML

<ul class="item" v-for=“area in data” :key="area.id">      // 何らかの処理 <li>{{area.city}}</li> </ul> 表示結果(まとめる前) Osaka Fukuoka Osaka Osaka Tokyo … やりたい表示結果(まとめた後) Osaka(9) Fukuoka(3) Tokyo(4) …

尚、cityの市の種類分フィルターリストを作成し、あらかじめHTMLにcityの市の種類分のタグを設定しておけば表示が可能と考えましたが、cityの市の種類が100以上あり下記やり方は効率的ではないと思っており、できればv-forなどで回した上でさらにリストを整形する方法があれば教えていただきたいです。

現状で考えたコード

computed: { OsakaCount: function() { // この処理をcityの市の種類分記載する必要あり var newList = []; for (var i = 0; i < this.data.length; i++) { isShow = false; if (this.data == 'Osaka') { isShow = true; } } return newList; } } <ul > <li>大阪({{OsakaCount.lenght}})</li> <li>福岡({{FukuokaCount.lenght}})</li> // HTMLにcityの市の種類分のタグをあらかじめ記載しておく必要あり </ul>

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

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

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

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

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

guest

回答1

0

ベストアンサー

JavaScript

1const dataList = // jsonの配列 2 3const resultList = dataList.map(function(data){ return data.city }) 4 .reduce(function(acc, val){ acc[val] != null ? acc[val]++ : acc[val] = 1; return acc; }, {});

で、リストを整形して

HTML

1<div v-for="(v, k) in data">{{k}}({{v}})</div>

でいけますでしょうか?

投稿2020/03/06 02:17

q_sane_q

総合スコア610

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

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

tomato01

2020/03/06 02:50

ご回答ありがとうございます。 教えて頂いた方法で思ったような動作になりました! mapとreduceの使い方関して、私はまだあまり理解していない状態なのでさらに勉強してみたいと思います。ありがとうございます。 参考(動作したコード) <div id="app"> <div v-for="(v, k) in resultList">{{k}}({{v}})</div> </div> <script> var dataList = [ { id: 121, city: "Osaka" }, { id: 123, city: "Fukuoka" }, { id: 425, city: "Osaka" }, { id: 645, city: "Tokyo" }, { id: 326, city: "Osaka" }, { id: 876, city: "Tokyo" }, { id: 456, city: "Osaka" }, { id: 335, city: "Osaka" }, { id: 471, city: "Tokyo" }, { id: 345, city: "Osaka" }, { id: 857, city: "Fukuoka" }, { id: 455, city: "Osaka" }, { id: 997, city: "Osaka" }, { id: 121, city: "Tokyo" }, { id: 115, city: "Osaka" }, { id: 668, city: "Fukuoka" } ]; console.log(dataList); const resultList = dataList .map(function(data) { return data.city; }) .reduce(function(acc, val) { acc[val] != null ? acc[val]++ : (acc[val] = 1); return acc; }, {}); var vm = new Vue({ el: "#app", data: { resultList: resultList } }); </script>
tomato01

2020/03/06 02:55

すいません、もし可能でしたらmapとreduceでのプロセスを簡単に伺えますでしょうか。
q_sane_q

2020/03/06 03:27

mapは配列から要素を置き換えた別の配列をつくる処理です この場合jsonの配列の1要素(data)をその中のcity(data.city)で置き換えた配列を作っています つまりdataListをもとにした文字列配列的なものができています reduceは複雑でいろいろなことができるのですが 今回の処理でいうとまず最後の「{}」が「acc」の初期値になります、つまりaccは空の連想配列としてスタートします で、配列の要素は1つずつvalに入って処理されていきますのでacc["Osaka"]、acc["Tokyo"]などを見ていることになります 存在していたら値にプラス1、存在していなかったら1で初期化をする操作をして、操作後のaccをreturnしています ちなみに実は今回の処理はmapの処理なしでも書くことができます reduceだけにして、acc[val]をacc[val.city]にしても動くはずです 個人的にreduceの中で何回もval.cityって書くのが好みでなかっただけなので実際にはこちらでも問題無いと思います
tomato01

2020/03/06 06:45

とても丁寧な解説を頂きありがとうございます! reduceの処理については、とても色々なことができそうと感じましたので調べてみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問