回答編集履歴
2
ソース修正
test
CHANGED
@@ -162,7 +162,7 @@
|
|
162
162
|
|
163
163
|
```
|
164
164
|
|
165
|
-
としていますが、ここは再帰を使わずとも、
|
165
|
+
としていますが、ここは再帰を使わずとも、もう一度`nodesMap`の各キーに対する値のすべてを `for ・・・ of ・・・` でループさせれば、全ノードを走査できるので、以下でよかったです。
|
166
166
|
|
167
167
|
```javascript
|
168
168
|
|
1
ソース修正
test
CHANGED
@@ -125,3 +125,59 @@
|
|
125
125
|
|
126
126
|
|
127
127
|
➡ [サンプル](https://codepen.io/i8086x/pen/YzQRXpd?editors=0012)
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
----
|
134
|
+
|
135
|
+
**追記:**
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
ひとつ追記しておきます。
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
上のコードでは、ツリーを構築した後に、各ノードの `parent` プロパティを削除するために、再帰関数を使って
|
144
|
+
|
145
|
+
```javascript
|
146
|
+
|
147
|
+
// 各ノードのparentプロパティが不要になったので削除
|
148
|
+
|
149
|
+
(function deleteParentRecursively(list) {
|
150
|
+
|
151
|
+
list.forEach(node => {
|
152
|
+
|
153
|
+
delete node.parent;
|
154
|
+
|
155
|
+
if (node.children.length)
|
156
|
+
|
157
|
+
deleteParentRecursively(node.children);
|
158
|
+
|
159
|
+
});
|
160
|
+
|
161
|
+
})(new_test_list);
|
162
|
+
|
163
|
+
```
|
164
|
+
|
165
|
+
としていますが、ここは再帰を使わずとも、再度`nodesMap`の各キーに対する値のすべてを `for ・・・ of ・・・` でループさせれば、全ノードを走査できるので、以下でよかったです。
|
166
|
+
|
167
|
+
```javascript
|
168
|
+
|
169
|
+
// 各ノードのparentプロパティが不要になったので削除
|
170
|
+
|
171
|
+
for (const node of nodesMap.values()) {
|
172
|
+
|
173
|
+
delete node.parent;
|
174
|
+
|
175
|
+
}
|
176
|
+
|
177
|
+
```
|
178
|
+
|
179
|
+
➡ [サンプル](https://codepen.io/i8086x/pen/powQEPM?editors=0012)
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
(ただし、このツリー構築作業用のマップ`nodesMap`が無くなってしまった後に、ツリーの全ノードをたどるには、`deleteParentRecursively`でやっているような再帰が分かり易いと思います。)
|