質問するログイン新規登録

回答編集履歴

1

選択表示機能追加

2021/12/09 11:56

投稿

babu_babu_baboo
babu_babu_baboo

スコア616

answer CHANGED
@@ -5,4 +5,67 @@
5
5
  list[lname] = (list[lname] || []).concat (rec);
6
6
 
7
7
  console.log (list);
8
+ ```
9
+ Array.filter に拘るのは無駄。
10
+
11
+ ```js
12
+ <!DOCTYPE hrml>
13
+ <meta charset="UTF-8">
14
+ <title></title>
15
+
16
+ <body>
17
+ <select id="hoge"><option></option></select>
18
+ <table border="1" id="fuga"></table>
19
+
20
+ <script>
21
+ var data =[
22
+ {
23
+ "sname": "機能1",
24
+ "category": "カテゴリー1",
25
+ "label": [
26
+ { "lname": "Aプラン"},
27
+ { "lname": "Bプラン" },
28
+ { "lname": "Cプラン"}
29
+ ]
30
+ },
31
+ {
32
+ "sname": "機能2",
33
+ "category": "カテゴリー2",
34
+ "label": [
35
+ { "lname": "Bプラン" },
36
+ { "lname": "Cプラン"}
37
+ ]
38
+ },
39
+ {
40
+ "sname": "機能3",
41
+ "category": "カテゴリー1",
42
+ "label": [
43
+ { "lname": "Aプラン"},
44
+ { "lname": "Bプラン" },
45
+ { "lname": "Dプラン"}
46
+ ]
47
+ }
48
+ ];
49
+
50
+ let list = { };
51
+ for (let rec of data)
52
+ for (let {lname} of rec.label)
53
+ list[lname] = (list[lname] || []).concat (rec);
54
+
55
+
56
+ for (let k of Object.keys (list))
57
+ hoge.appendChild (new Option (k));
58
+
59
+ hoge.addEventListener ('change', (e,p=list[e.target.value])=> {
60
+ [...fuga.children].forEach (e=>e.remove());
61
+ !p || ary2tbody (p.map (p=> Object.entries (p).map (([k,v])=> Array.isArray (v) ? v.map(v=>v.lname).join(', '):v)), fuga);
62
+ });
63
+
64
+ function ary2tbody (a, b=document.createElement('tbody')) {
65
+ return a.reduce((b,c)=>(c.reduce((c,d)=>(c.insertCell().textContent=d,c),b.insertRow()),b),b);
66
+ }
67
+
68
+
69
+ </script>
70
+
8
71
  ```