やりたいこと
JSONでの取得してからの出力結果をこちらの意図したように表示したいです。
次のような形です。
- 下記JSON内のdetailが該当するキーワードが複数存在する場合、最初の1グループだけを表示
下記JSONを例にすると「東北」ですと、このような結果になります。
宮城(2件) 秋田(1件)
宮城が最初にきていますので、これで宮城のグループだけ表示したいです。
牛タン
デリバリー可
ghutan.com
気仙沼ホルモン
EC販売
kesennuma.com
一番最後に希望の出力形式を記載します。 2. 下記JSON内のdetaiが1件のみ場合はdetail内のprefで表示されるものを要素ごと非表示したが、結果でfalseと表示されてしまう (下記JSONで例えると「region: 関西」です) です。 1.は調べてもやり方がまったくわからない状態なので、教えていただけたら幸いです。 2.「false」と表示されてしまいます。これを消すにはどうしたらいいでしょうか? 現在作業中のコード・取得したJSONとそこから得られる結果を記載します。 コードについては先日、こちらへ別件で質問した際にいろいろ教えていただいたものを少し変えています。 [リンク内容](https://teratail.com/questions/260771) ```javascript const jsonPath = path; $.ajax({ type: 'GET', url: jsonPath, cache: false, success: shopLoop, }); function prefsInfo(detail) { const counts = _.mapValues(_.groupBy(detail, "pref"), 'length'); const sortedCounts = Object.entries(counts).sort((e1, e2) => e2[1]-e1[1]); return sortedCounts.map(([pref, count]) => (sortedCounts.length !== 1) && `<li data-name="${pref}">${pref}(${count}件)</li>`).join(' '); } function shopLoop(jsondata) { const regionsHtml = jsondata.map( ({ region, detail },i) => { const prefs = prefsInfo(detail); const items = detail.map( e => `<div> <ul> <li>${e.product}</li> <li>${e.type}</li> </ul> <div> <a href="${e.url}"><img src="./store_shop_ico.png" alt="" srcset="">${e.url}</a> </div> </div> ` ).join(''); var h = `<h2>${region}</h2>` + `<div>` + `<ul class="hoge-${i++}">${prefs}</ul>` + `${items}` + `</div>`; return h; }); $('#hoge-list').html(regionsHtml); }
JSON
1[ 2 { 3 "region": "東北", 4 "detail": [ 5 { 6 "pref": "宮城", 7 "product": "牛タン", 8 "url": "ghutan.com", 9 "type": "デリバリー可" 10 }, 11 { 12 "pref": "宮城", 13 "product": "気仙沼ホルモン", 14 "url": "kesennuma.com", 15 "type": "EC販売" 16 }, 17 { 18 "pref": "秋田", 19 "product": "きりたんぽ", 20 "url": "kiritanpo.com", 21 "type": "EC、デリバリー可" 22 } 23 ] 24 }, 25 { 26 "region": "関東", 27 "detail": [ 28 { 29 "pref": "東京", 30 "product": "東京ばなな1", 31 "url": "tokyobanana1.com", 32 "type": "EC販売" 33 }, 34 { 35 "pref": "東京", 36 "product": "東京ばなな2", 37 "url": "tokyobanana2.com", 38 "type": "デリバリー販売" 39 }, 40 { 41 "pref": "埼玉", 42 "product": "草加せんべい", 43 "url": "sokasenbei.com", 44 "type": "デリバリー可" 45 }, 46 { 47 "pref": "埼玉", 48 "product": "さつまいも料理", 49 "url": "satsumaimo.com", 50 "type": "テイクアウト可" 51 } 52 ] 53 }, 54 { 55 "region": "関西", 56 "detail": [ 57 { 58 "pref": "大阪", 59 "product": "たこやき", 60 "url": "takoyaki.com", 61 "type": "テイクアウト可、EC販売" 62 } 63 ] 64 } 65]
このようになります。
HTML
html
1<h2>東北</h2> 2<div> 3 <ul class="hoge-0"> 4 <li>宮城(2件)</li> 5 <li>秋田(1件)</li> 6 </ul> 7 <div> 8 <ul> 9 <li>牛タン</li> 10 <li>デリバリー可</li> 11 </ul> 12 <div> 13 <a href="ghutan.com"><img src="./store_shop_ico.png" alt="" srcset="">ghutan.com</a> 14 </div> 15 </div> 16 <div> 17 <ul> 18 <li>気仙沼ホルモン</li> 19 <li>EC販売</li> 20 </ul> 21 <div> 22 <a href="ghutan.com"><img src="./store_shop_ico.png" alt="" srcset="">ghutan.com</a> 23 </div> 24 </div> 25 <div> 26 <ul> 27 <li>きりたんぽ</li> 28 <li>EC、デリバリー可</li> 29 </ul> 30 <div> 31 <a href="kiritanpo.com"><img src="./store_shop_ico.png" alt="" srcset="">kiritanpo.com</a> 32 </div> 33 </div> 34</div> 35 36 37<h2>関東</h2> 38<div> 39 <div> 40 <ul class="hoge-1"> 41 <li>東京(2件)</li> 42 <li>埼玉(2件)</li> 43 </ul> 44 <div> 45 <ul> 46 <li>東京ばなな1</li> 47 <li>EC販売</li> 48 </ul> 49 <div> 50 <a href="tokyobanana1.com"><img src="./store_shop_ico.png" alt="" srcset="">tokyobanana1.com</a> 51 </div> 52 </div> 53 <div> 54 <ul> 55 <li>東京ばなな2</li> 56 <li>デリバリー販売</li> 57 </ul> 58 <div> 59 <a href="tokyobanana2.com"><img src="./store_shop_ico.png" alt="" srcset="">tokyobanana2.com</a> 60 </div> 61 </div> 62 63 <div> 64 <ul> 65 <li>草加せんべい</li> 66 <li>デリバリー可</li> 67 </ul> 68 <div> 69 <a href="sokasenbei.com"><img src="./store_shop_ico.png" alt="" srcset="">sokasenbei.com</a> 70 </div> 71 </div> 72 <div> 73 <ul> 74 <li>さつまいも料理</li> 75 <li>テイクアウト可</li> 76 </ul> 77 <div> 78 <a href="satsumaimo.com"><img src="./store_shop_ico.png" alt="" srcset="">satsumaimo.com</a> 79 </div> 80 </div> 81</div> 82 83<h2>関西</h2> 84<div> 85 <div> 86 <ul class="hoge-2"> 87 <li>false</li> 88 </ul> 89 <div> 90 <ul> 91 <li>たこやき</li> 92 <li>テイクアウト可、EC販売</li> 93 </ul> 94 <div> 95 <a href="takoyaki.com"><img src="./store_shop_ico.png" alt="" srcset="">takoyaki.com</a> 96 </div> 97 </div> 98</div>
ブラウザ表示
東北 宮城(2件) 秋田(1件) 牛タン デリバリー可 ghutan.com 気仙沼ホルモン EC販売 kesennuma.com きりたんぽ EC、デリバリー可 kiritanpo.com 関東 東京(2件) 埼玉(2件) 東京ばなな1 EC販売 tokyobanana1.com 東京ばなな2 デリバリー販売 tokyobanan2.com 草加せんべい デリバリー可 sokasenbei.com さつまいも料理 テイクアウト可 satsumaimo.com 関西 false たこやき テイクアウト可、EC販売 takoyaki.com
#希望の出力形式
このような形にしたいです。
HTML表示
html
1<h2>東北</h2> 2<div> 3 <ul class="hoge-0"> 4 <li>宮城(2件)</li> 5 <li>秋田(1件)</li> 6 </ul> 7 <div> 8 <ul> 9 <li>牛タン</li> 10 <li>デリバリー可</li> 11 </ul> 12 <div> 13 <a href="ghutan.com"><img src="./store_shop_ico.png" alt="" srcset="">ghutan.com</a> 14 </div> 15 </div> 16 <div> 17 <ul> 18 <li>気仙沼ホルモン</li> 19 <li>EC販売</li> 20 </ul> 21 <div> 22 <a href="ghutan.com"><img src="./store_shop_ico.png" alt="" srcset="">ghutan.com</a> 23 </div> 24 </div> 25</div> 26 27 28<h2>関東</h2> 29<div> 30 <div> 31 <ul class="hoge-1"> 32 <li>東京(2件)</li> 33 <li>埼玉(2件)</li> 34 </ul> 35 <div> 36 <ul> 37 <li>東京ばなな1</li> 38 <li>EC販売</li> 39 </ul> 40 <div> 41 <a href="tokyobanana1.com"><img src="./store_shop_ico.png" alt="" srcset="">tokyobanana1.com</a> 42 </div> 43 </div> 44 <div> 45 <ul> 46 <li>東京ばなな2</li> 47 <li>デリバリー販売</li> 48 </ul> 49 <div> 50 <a href="tokyobanana2.com"><img src="./store_shop_ico.png" alt="" srcset="">tokyobanana2.com</a> 51 </div> 52 </div> 53</div> 54 55<h2>関西</h2> 56<div> 57 <div> 58 <ul class="hoge-2"></ul> 59 <div> 60 <ul> 61 <li>たこやき</li> 62 <li>テイクアウト可、EC販売</li> 63 </ul> 64 <div> 65 <a href="takoyaki.com"><img src="./store_shop_ico.png" alt="" srcset="">takoyaki.com</a> 66 </div> 67 </div> 68</div>
ブラウザ表示
東北 宮城(2件) 秋田(1件) 牛タン デリバリー可 ghutan.com 気仙沼ホルモン EC販売 kesennuma.com 関東 東京(2件) 埼玉(2件) 東京ばなな1 EC販売 tokyobanana1.com 東京ばなな2 EC販売 tokyobanana2.com 関西 たこやき テイクアウト可、EC販売 takoyaki.com
回答2件
あなたの回答
tips
プレビュー