回答編集履歴

2

追記

2022/12/06 22:08

投稿

退会済みユーザー
test CHANGED
@@ -1,15 +1,43 @@
1
+ 1.JSONと正規表現を使った方法
2
+
1
- とりあえず、id と str が常に隣り合っており、id が数値であり、かつ id => str の順番で並んでいるという前提になりますが、
3
+ とりあえず、idNamecode と Num隣接していて常にの順番で並んでいるという前提になりますが、
2
4
  ```js
3
5
  const json = JSON.stringify(bbb);
4
- const re = /"id":(\d+)\,"str":"(.+?)"/gm;
6
+ const re = /"idName":"(.+?)","code".+?,"Num":(\d+)/gm;
5
7
  const table = {};
6
8
 
7
9
  for (let p; p = re.exec(json);) {
8
10
  table[p[1]] = p[2];
9
11
  }
10
12
 
11
- aaa = aaa.map(e => ({ ...e, "str": table[e.id] ?? '' }));
13
+ aaa = aaa.map(e => ({ ...e, "Num" : table[e.idName] ?? '' }));
12
-
13
14
  console.log(aaa)
14
15
  ```
16
+ ---
17
+
18
+ 2.再帰を使った方法
19
+
20
+ こちらは順番に依存しません。(読みやすさの観点からあえて reduce等 は使っていません)
21
+ ```js
15
- (もっと堅牢な書き方はありそう)
22
+ const table = {};
23
+
24
+ function scan(obj) {
25
+ if (obj instanceof Array) {
26
+ obj.forEach(e => scan(e));
27
+ } else {
28
+ Object.keys(obj).forEach(p => {
29
+ if (p == 'idName' && obj.hasOwnProperty('Num')) {
30
+ table[obj['idName']] = obj['Num'];
31
+ }
32
+
33
+ if (obj[p] instanceof Object || obj[p] instanceof Array) {
34
+ scan(obj[p]);
35
+ }
36
+ });
37
+ }
38
+ }
39
+
40
+ scan(bbb);
41
+ aaa = aaa.map(e => ({ ...e, "Num" : table[e.idName] ?? '' }));
42
+ console.log(aaa);
43
+ ```

1

2022/12/06 15:28

投稿

退会済みユーザー
test CHANGED
@@ -4,7 +4,7 @@
4
4
  const re = /"id":(\d+)\,"str":"(.+?)"/gm;
5
5
  const table = {};
6
6
 
7
- for (let p; p = re.exec(json); p) {
7
+ for (let p; p = re.exec(json);) {
8
8
  table[p[1]] = p[2];
9
9
  }
10
10