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

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

詳細はこちら
Vue.js

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

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

692閲覧

配列を正規化して表示させたい

yamamoto244

総合スコア14

Vue.js

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

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2019/10/02 19:40

フロントの実装で、困っているのでご教授頂けますと幸いです。

userA 1 → userA 1 2 3 userA 2   userB 4 5 userA 3   userC 6 userB 4 userB 5 userC 6

DBからデータを抜き取って、取得したデータを右のように表示させているが、
vue.jsでどのような方法で実現したら良いか悩んでます。

vue.js

1tr(v-for="(a,index) in answers") 2 template(v-if="index === 0") 3 td {{ a.user_id }} 4 td {{ a.answer }} 5 template(v-else-if="a.user_id === answers[index-1].user_id") 6 td {{ a.answer }} 7 template(v-else-if="a.user_id !== answers[index-1].user_id") 8 td(v-for) {{ a.user_id }}

上記の方法で、試してみましたが、下記にようになってしまっている状況です。

userA 1 2 3 userB 4 5 userC 6

原因または解決法をご存知の方はコメントいただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問文の実現したい内容が分かりづらかったので、一部予測が入っていますが、以下の方法はいかがでしょうか。

前提条件

DBから取得したデータ「answers」は次の形である。

const answers = [ { user_id: 'userA', answer: 1 }, { user_id: 'userA', answer: 2 }, { user_id: 'userA', answer: 3 }, { user_id: 'userB', answer: 4 }, { user_id: 'userB', answer: 5 }, { user_id: 'userC', answer: 6 } ]

このデータをuser_id毎に正規化したい。

方法

<template lang="pug"> tr(v-for="user_id in Object.keys(normalizedAnswers)" :key="user_id") td {{ user_id }} td(v-for="(answer, i in normalizedAnswers[user_id])" :key="i") {{ answer }} </template> <script> // ...省略 computed: { normalizedAnswers() { let normalizedAnswers = {} answers.forEach(answer => { if (normalizedAnswers.hasOwnProperty(answer.user_id)) { normalizedAnswers[answer.user_id].push(answer.answer) } else { normalizedAnswers[answer.user_id] = [ answer.answer ] } }) } } // ...省略 </script>

投稿2019/10/04 10:50

yuhigash

総合スコア327

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

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

yamamoto244

2019/10/04 10:54

わかりづらくて、申し訳ありませんでした。 予測していただいた通りです。 ありがとうございます!
yuhigash

2019/10/04 10:58

いえ!解決したようで良かったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問