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

回答編集履歴

2

ソース修正

2021/09/26 16:44

投稿

退会済みユーザー
answer CHANGED
@@ -80,7 +80,7 @@
80
80
  });
81
81
  })(new_test_list);
82
82
  ```
83
- としていますが、ここは再帰を使わずとも、度`nodesMap`の各キーに対する値のすべてを `for ・・・ of ・・・` でループさせれば、全ノードを走査できるので、以下でよかったです。
83
+ としていますが、ここは再帰を使わずとも、もう一度`nodesMap`の各キーに対する値のすべてを `for ・・・ of ・・・` でループさせれば、全ノードを走査できるので、以下でよかったです。
84
84
  ```javascript
85
85
  // 各ノードのparentプロパティが不要になったので削除
86
86
  for (const node of nodesMap.values()) {

1

ソース修正

2021/09/26 16:43

投稿

退会済みユーザー
answer CHANGED
@@ -61,4 +61,32 @@
61
61
  ```
62
62
 
63
63
 
64
- ➡ [サンプル](https://codepen.io/i8086x/pen/YzQRXpd?editors=0012)
64
+ ➡ [サンプル](https://codepen.io/i8086x/pen/YzQRXpd?editors=0012)
65
+
66
+
67
+ ----
68
+ **追記:**
69
+
70
+ ひとつ追記しておきます。
71
+
72
+ 上のコードでは、ツリーを構築した後に、各ノードの `parent` プロパティを削除するために、再帰関数を使って
73
+ ```javascript
74
+ // 各ノードのparentプロパティが不要になったので削除
75
+ (function deleteParentRecursively(list) {
76
+ list.forEach(node => {
77
+ delete node.parent;
78
+ if (node.children.length)
79
+ deleteParentRecursively(node.children);
80
+ });
81
+ })(new_test_list);
82
+ ```
83
+ としていますが、ここは再帰を使わずとも、再度`nodesMap`の各キーに対する値のすべてを `for ・・・ of ・・・` でループさせれば、全ノードを走査できるので、以下でよかったです。
84
+ ```javascript
85
+ // 各ノードのparentプロパティが不要になったので削除
86
+ for (const node of nodesMap.values()) {
87
+ delete node.parent;
88
+ }
89
+ ```
90
+ ➡ [サンプル](https://codepen.io/i8086x/pen/powQEPM?editors=0012)
91
+
92
+ (ただし、このツリー構築作業用のマップ`nodesMap`が無くなってしまった後に、ツリーの全ノードをたどるには、`deleteParentRecursively`でやっているような再帰が分かり易いと思います。)