回答編集履歴
2
追記
test
CHANGED
@@ -1,15 +1,43 @@
|
|
1
|
+
1.JSONと正規表現を使った方法
|
2
|
+
|
1
|
-
とりあえず、id と
|
3
|
+
とりあえず、idName と code と Numが隣接していて常にこの順番で並んでいるという前提になりますが、
|
2
4
|
```js
|
3
5
|
const json = JSON.stringify(bbb);
|
4
|
-
const re = /"id":(
|
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, "
|
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
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);
|
7
|
+
for (let p; p = re.exec(json);) {
|
8
8
|
table[p[1]] = p[2];
|
9
9
|
}
|
10
10
|
|