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

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

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

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

Q&A

3回答

1857閲覧

配列オブジェクトからHTMLのリストを表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2020/08/03 06:59

編集2020/08/03 07:39

はじめまして。今JavaScriptを勉強しているものです。
はじめて、teratailを使わさせて頂きました。

下記の様な配列オブジェクトがあります。

javascript

1const array = [ 2 { 3 key: "A", 4 value: ['<div><span>a</span></div>', '<div><span>a</span></div>'] 5 }, 6 { 7 key: "B", 8 value: ['<div><span>a</span></div>', '<div><span>a</span></div>', '<div><span>a</span></div>'] 9 }, 10 { 11 key: "C", 12 value: ['<div><span>a</span></div>', '<div><span>a</span></div>', '<div><span>a</span></div>', '<div><span>a</span></div>'] 13 }, 14 { 15 key: "D", 16 value: ['<div><span>a</span></div>', '<div><span>a</span></div>'] 17 } 18 ];

この配列オブジェクトを使ってHTMLでリスト表示させたいのですが、どの様にループ処理させれば良いのかがわからない状態で悩んでおります。

keyの部分は、リストのタイトル<h2>にしたく、valueの部分は、<li>で作りたいです。表示したい順序も配列のそのままで表示したくご教示頂けませんでしょうか。

下記の様にmapで出来るのかと考えてみたのですがわからない状態です。

javascript

1const html = array.map(([k, l]) => ` 2 <ul> 3 <li class="list">${k}<li> 4 ${l.map(n => `<ul><li class="listend">${n}</li></ul>`).join('')} 5</ul>`);

出力したいHTMLですが、

html

1<div id="sub"><--!ここにJSからのhtmlを入れたいです--></div>

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

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

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

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

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

kei344

2020/08/03 07:07

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
yambejp

2020/08/03 07:15

liにdivを流し込むんですか? 親はulですか?
退会済みユーザー

退会済みユーザー

2020/08/03 07:21

只今、試してみたコードを追加いたしました。
yambejp

2020/08/03 07:33

回答はしましたが、最終形がみえません 出力したいHTMLのサンプルをつけてください
退会済みユーザー

退会済みユーザー

2020/08/03 07:39

htmlも追加してみました。
miyabi_takatsuk

2020/08/03 17:38

yambejpさんのコメントをよく見てください。 > 最終形がみえません ということは、中身を入れたいHTMLを提示するのではなく、 最終的にどういう構造のHTMLにしたいか、の最終の形式を提示をして下さい、っていうことです。 つまり、現状ではなく、理想とするHTMLの出力結果を提示して下さい、ってことです。
guest

回答3

0

こんにちは。一例としまして、こんな感じでいかがでしょうか?

javascript

1 const obj2html = ({ key, value }) => { 2 const header = `<h2>${key}</h2>\n`; 3 const items = value.map(div => `<li>${div}</li>\n`).join(''); 4 return `${header}<ul>\n${items}</ul>`; 5 }; 6 7 document.querySelector('#sub').innerHTML = array.map(obj2html).join('\n');

投稿2020/08/03 07:35

編集2020/08/03 23:12
jun68ykt

総合スコア9058

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

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

0

この場合はmapの実引数に渡されるのは配列ではなくオブジェクトなので、オブジェクトの分割代入を利用しないと実行時にエラーが発生して処理が行えません。

オブジェクトの分割代入

javascript

1const html = array.map(({key, value}) => ` 2 <ul> 3 <li class="list">${key}<li> 4 ${value.map(n => `<ul><li class="listend">${n}</li></ul>`).join('')} 5</ul>`);

投稿2020/08/03 07:33

ku__ra__ge

総合スコア4524

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

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

0

追記部分でむしろ何がしたいかわからなくなりました

投稿2020/08/03 07:32

yambejp

総合スコア116734

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

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

yambejp

2020/08/03 07:34 編集

window.addEventListener('DOMContentLoaded', ()=>{ array.forEach(x=>{ [Object.assign(document.createElement('h2'),{textContent:x.key}), x.value.reduce((x,y)=>(x.appendChild(Object.assign(document.createElement('li'),{innerHTML:y})),x),document.createElement('ul')), ].forEach(x=>{ document.querySelector('body').appendChild(x); }); }); });
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問