回答編集履歴

1

選択表示機能追加

2021/12/09 11:56

投稿

babu_babu_baboo
babu_babu_baboo

スコア616

test CHANGED
@@ -13,3 +13,129 @@
13
13
  console.log (list);
14
14
 
15
15
  ```
16
+
17
+ Array.filter に拘るのは無駄。
18
+
19
+
20
+
21
+ ```js
22
+
23
+ <!DOCTYPE hrml>
24
+
25
+ <meta charset="UTF-8">
26
+
27
+ <title></title>
28
+
29
+
30
+
31
+ <body>
32
+
33
+ <select id="hoge"><option></option></select>
34
+
35
+ <table border="1" id="fuga"></table>
36
+
37
+
38
+
39
+ <script>
40
+
41
+ var data =[
42
+
43
+ {
44
+
45
+ "sname": "機能1",
46
+
47
+ "category": "カテゴリー1",
48
+
49
+ "label": [
50
+
51
+ { "lname": "Aプラン"},
52
+
53
+ { "lname": "Bプラン" },
54
+
55
+ { "lname": "Cプラン"}
56
+
57
+ ]
58
+
59
+ },
60
+
61
+ {
62
+
63
+ "sname": "機能2",
64
+
65
+ "category": "カテゴリー2",
66
+
67
+ "label": [
68
+
69
+ { "lname": "Bプラン" },
70
+
71
+ { "lname": "Cプラン"}
72
+
73
+ ]
74
+
75
+ },
76
+
77
+ {
78
+
79
+ "sname": "機能3",
80
+
81
+ "category": "カテゴリー1",
82
+
83
+ "label": [
84
+
85
+ { "lname": "Aプラン"},
86
+
87
+ { "lname": "Bプラン" },
88
+
89
+ { "lname": "Dプラン"}
90
+
91
+ ]
92
+
93
+ }
94
+
95
+ ];
96
+
97
+
98
+
99
+ let list = { };
100
+
101
+ for (let rec of data)
102
+
103
+ for (let {lname} of rec.label)
104
+
105
+ list[lname] = (list[lname] || []).concat (rec);
106
+
107
+
108
+
109
+
110
+
111
+ for (let k of Object.keys (list))
112
+
113
+ hoge.appendChild (new Option (k));
114
+
115
+
116
+
117
+ hoge.addEventListener ('change', (e,p=list[e.target.value])=> {
118
+
119
+ [...fuga.children].forEach (e=>e.remove());
120
+
121
+ !p || ary2tbody (p.map (p=> Object.entries (p).map (([k,v])=> Array.isArray (v) ? v.map(v=>v.lname).join(', '):v)), fuga);
122
+
123
+ });
124
+
125
+
126
+
127
+ function ary2tbody (a, b=document.createElement('tbody')) {
128
+
129
+ return a.reduce((b,c)=>(c.reduce((c,d)=>(c.insertCell().textContent=d,c),b.insertRow()),b),b);
130
+
131
+ }
132
+
133
+
134
+
135
+
136
+
137
+ </script>
138
+
139
+
140
+
141
+ ```