回答編集履歴
3
追記
answer
CHANGED
File without changes
|
2
追記
answer
CHANGED
@@ -34,4 +34,19 @@
|
|
34
34
|
}
|
35
35
|
const tree = [result[0]];
|
36
36
|
console.log(JSON.stringify(tree, undefined, 2));
|
37
|
+
```
|
38
|
+
|
39
|
+
### 追記 id が連番でない、またはルートが複数ある場合
|
40
|
+
|
41
|
+
```JavaScript
|
42
|
+
const result = datas
|
43
|
+
.map(a => { return {"id":a.id, "children":[]}; })
|
44
|
+
.reduce((result, item) => { result[item.id] = item; return result; }, {});
|
45
|
+
for (const datum of datas.filter(a => a.parent !== null)) {
|
46
|
+
result[datum.parent].children.push(result[datum.id]);
|
47
|
+
}
|
48
|
+
const tree = datas
|
49
|
+
.filter(a => a.parent === null)
|
50
|
+
.map(a => result[a.id]);
|
51
|
+
console.log(JSON.stringify(tree, undefined, 2));
|
37
52
|
```
|
1
修正
answer
CHANGED
@@ -29,8 +29,9 @@
|
|
29
29
|
];
|
30
30
|
|
31
31
|
const result = datas.map(a => { return {"id":a.id, "children":[]}; });
|
32
|
-
for (
|
32
|
+
for (const datum of datas.filter(a => a.parent !== null)) {
|
33
33
|
result[datum.parent].children.push(result[datum.id]);
|
34
34
|
}
|
35
|
+
const tree = [result[0]];
|
35
|
-
console.log(JSON.stringify(
|
36
|
+
console.log(JSON.stringify(tree, undefined, 2));
|
36
37
|
```
|