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

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

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

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1036閲覧

React: 取得した配列を要素を指定せずに全表示したい

caveatld

総合スコア17

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/02/22 16:35

Backendから取得するデータを配列に入れて,React内で表示する事を考えております。

例えば以下の様なデータであれば,

json

1[{ 2 "col1": "a1", 3 "col2": "a2", 4 "col3": "a3", 5 "col4": "a4" 6},{ 7 "col1": "b1", 8 "col2": "b2", 9 "col3": "b3", 10 "col4": "b4" 11}]

以下の様な表示イメージです。

col1col2col3col4
a1a3a4
b1b3b4

こちら,毎回取得するデータ構造が同じであれば,map関数の中で個別の要素を指定して表示すればできそうなのですが,例えばデータによってはcol5やcol6が追加されたりする場合,どの様にすればひとつずつの要素を指定せず,可変的に表を作成できますでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じでしょうか。

js

1const data = [ 2 { 3 "col1": "a1", 4 "col2": "a2", 5 "col3": "a3", 6 "col4": "a4" 7 }, 8 { 9 "col1": "b1", 10 "col2": "b2", 11 "col4": "b4", 12 "col5": "b5" 13 }, 14 { 15 "col1": "c1", 16 "col3": "c3", 17 "col4": "c4", 18 "col6": "c6" 19 }, 20 { 21 "col2": "d2", 22 "col3": "d3", 23 "col5": "d5", 24 "col6": "d6" 25 }, 26 { 27 "col3": "e3", 28 "col4": "e4", 29 "col7": "e7", 30 "col8": "e8" 31 } 32]; 33 34function App() { 35 const keys = data.reduce( 36 (keys, obj) => [...keys, ...Object.keys(obj).filter(key => !keys.includes(key))], 37 []); 38 39 return ( 40 <> 41 <style> 42 {` 43 th, td { border: 1px solid #ddd; padding: 8px; text-align: center; } 44 thead tr { background: #f5f5f5; } 45 tbody tr:nth-child(odd) { background: #fff; } 46 tbody tr:nth-child(even) { background: #fbfbfb; } 47 `} 48 </style> 49 <table> 50 <thead> 51 <tr> 52 {keys.map(key => <th key={key}>{key}</th>)} 53 </tr> 54 </thead> 55 <tbody> 56 {data.map((obj, index) => ( 57 <tr key={index}> 58 {keys.map(key => <td key={key}>{obj[key]}</td>)} 59 </tr> 60 ))} 61 </tbody> 62 </table> 63 </> 64 ); 65}

表示例

col1col2col3col4col5col6col7col8
a1a2a3a4
b1b2b4b5
c1c3c4c6
d2d3d5d6
e3e4e7e8

投稿2021/02/23 07:43

hoshi-takanori

総合スコア7901

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

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

caveatld

2021/02/24 14:35

ご教示ありがとうございました!完璧に意図通りでした!! 大変助かりました。
caveatld

2021/02/25 15:14

重ねての質問で恐縮なのですが, const data = [ {'Subject': ['100', '101', '102']}, {'Height': [189, 200, 174]}, {'Country': ["Japan", "US", "India"]} ] 上記の様な,入れ子になった配列を表示したいのですが,ご教示頂いたコードをどの様に変更すれば対応可能でしょうか? 現状,ひとつのセルに,100101102, JapanUSIndiaの様に結合されて表示されていまいます。。
hoshi-takanori

2021/02/25 15:35

それをどのように表示したいのでしょうか? また、配列のサイズは可変ですか?
caveatld

2021/02/25 15:38

ご連絡ありがとうございます! 配列のサイズは可変です。表示したい形としては, Subject | Height | Country --------------------------- 100 | 189 | Japan 101 | 200 | US 102 | 174 | India という感じに表示できればと思っております。。
hoshi-takanori

2021/02/25 15:44

うーん、それは元の質問とはだいぶ違う条件ですね。かつ、仕様がいまいち曖昧…。
caveatld

2021/02/25 15:49

そうですよね!teratail初心者のため,失礼いたしました。 別途質問を立てたいと思います,ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問